[Gfoss] Ottimizzazione mapfile per carta tematica

Salve a tutti,
ho un quesito per gli esperti di mapserver. Vorrei produrre
con mapserver la solita mappa topp:states usata nelle
demo di GeoServer, di cui allego una copia in questa mail.

Ora, se non ho capito male per ottenere lo stesso risultato
in mapserver devo definire tre layer, uno per i poligoni
con i filtri sul numero di persone (è quello che pilota
il colore del poligono), uno per disegnare i bordi,
uno per le etichette.

Avevo provato a far tutto con un solo layer, ma se metto
campitura poligoni e label nello stesso layer, le etichette
non si vedono, e se uso l'outline per disegnare i bordi
insieme ai poligoni, i bordi risultano sbavati o incompleti
(vengono comperti in alcuni punti dalla campitura del poligono).

Ho allegato il file map (ha un layer estraneo che mi
serve per altre prove).

Mi sapete dire se sto sbagliando qualcosa?
Si può impostare un mapfile in modo da ottenere lo stesso
risultato, ma facendo lavorare meno mapserver?

Ciao
Andrea

states_gs.png

bench.map (2.89 KB)

Andrea Aime ha scritto:

Salve a tutti,
ho un quesito per gli esperti di mapserver. Vorrei produrre
con mapserver la solita mappa topp:states usata nelle
demo di GeoServer, di cui allego una copia in questa mail.

Ora, se non ho capito male per ottenere lo stesso risultato
in mapserver devo definire tre layer, uno per i poligoni
con i filtri sul numero di persone (è quello che pilota
il colore del poligono), uno per disegnare i bordi,
uno per le etichette.

Hum, mi ha fatto notare Flavio offline che in effetti
posso unire il layer che riempie i poligoni con quello
che disegna i bordi. L'aberrazione nel disegno c'e', ma
si vede solo usando un client tiling come OpenLayers,
se invece si chiede la mappa in un botto solo l'output
è corretto. (il suggerimento di usare tre layer separati l'ho trovato
sul tutorial di mapserver:
http://biometry.gis.umn.edu/tutorial/example1-4.html).

Resta il fatto che se cerco di mettere tutto in un solo
layer, come nel mapfile allegato, le etichette non vengono
disegnate...

Ciao
Andrea

benchOne.map (1.81 KB)

Andrea Aime ha scritto:

Hum, mi ha fatto notare Flavio offline

Hem... Fabio, non Flavio. Sorry :wink:
Ciao
Andrea

Ciao Andrea,
grazie della precisazione :wink:

Credo di aver capito il tuo problema…cioè, le etichette devi aggiungerle per ciascuna classe. Forse è per questo che non vengono generate.
PS: tra l’altro non ho visto settato CLASSITEM nel tuo map file…

Ad ogni modo, ti allego un esempio:

LAYER
NAME “com”
DATA “com_lim_GBE.shp”
STATUS default
MINSCALE 10000
TYPE POLYGON
LABELITEM “NOMECOMUNE”

PROJECTION
“proj=tmerc”
“lat_0=0”
“lon_0=15”
“k=0.9996”
“x_0=2520000”
“y_0=0”
“ellps=intl”
“units=m”
“no_defs”
END

METADATA
“DESCRIPTION” “Limiti Comunali”
“LAYER_ENCODING” “UTF-8”
“ows_title” “com”
END
TEMPLATE “ttt”
CLASSITEM “NOMECOMUNE”
CLASS

EXPRESSION (‘[NOMECOMUNE]’ != ‘PIPPO’)
NAME “Comuni Limitrofi”
LABEL
TYPE truetype
FONT FreeSans
SIZE 7
#POSITION CC
POSITION AUTO
ANGLE AUTO
COLOR 0 0 0
OUTLINECOLOR 255 255 254
ANTIALIAS TRUE
END

size 2
color 178 178 178
outlinecolor 79 79 79

END

CLASS
NAME “PIPPO”

EXPRESSION (‘[NOMECOMUNE]’ eq ‘PIPPO’)
SYMBOL ‘linea’
size 2
LABEL
TYPE truetype
FONT FreeSans
SIZE 10
#POSITION CC
POSITION AUTO
ANGLE AUTO
COLOR 0 0 0
OUTLINECOLOR 255 255 254
ANTIALIAS TRUE
END

outlinecolor 79 79 79

END

Fammi sapere.

Fabio

Il 16/02/08, Andrea Aime <aaime@openplans.org> ha scritto:

Andrea Aime ha scritto:

Hum, mi ha fatto notare Flavio offline

Hem… Fabio, non Flavio. Sorry :wink:
Ciao
Andrea


Iscriviti all’associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
Gfoss@faunalia.com
http://www.faunalia.com/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell’Associazione GFOSS.it.

…dimenticavo, perchè dici che MapServer non si può usare con OL ?

2008/2/16, Andrea Aime <aaime@openplans.org>:

Andrea Aime ha scritto:

Salve a tutti,
ho un quesito per gli esperti di mapserver. Vorrei produrre
con mapserver la solita mappa topp:states usata nelle
demo di GeoServer, di cui allego una copia in questa mail.

Ora, se non ho capito male per ottenere lo stesso risultato
in mapserver devo definire tre layer, uno per i poligoni
con i filtri sul numero di persone (è quello che pilota
il colore del poligono), uno per disegnare i bordi,
uno per le etichette.

Hum, mi ha fatto notare Flavio offline che in effetti
posso unire il layer che riempie i poligoni con quello
che disegna i bordi. L’aberrazione nel disegno c’e’, ma
si vede solo usando un client tiling come OpenLayers,
se invece si chiede la mappa in un botto solo l’output
è corretto. (il suggerimento di usare tre layer separati l’ho trovato
sul tutorial di mapserver:
http://biometry.gis.umn.edu/tutorial/example1-4.html).

Resta il fatto che se cerco di mettere tutto in un solo
layer, come nel mapfile allegato, le etichette non vengono
disegnate…

Ciao
Andrea

Map server benchmark map file

MAP
IMAGETYPE PNG
EXTENT -180 -90 180 90
SIZE 400 300
SHAPEPATH “./data”
IMAGECOLOR 255 255 255
FONTSET “./fonts/fonts.list”

Debug

CONFIG “MS_ERRORFILE” “/home/aaime/public_html/bench/tmp/mapserver.log”

DEBUG 2

WMS and WFS metadata

WEB
METADATA
“wms_title” “WMS Demo Server”
“wms_onlineresource” “http://localhost/cgi-bin/mapserv?map=/bench/bench.map&
“wms_srs” “EPSG:4326”
“wfs_title” “WFS Demo Server”
“wfs_onlineresource” “http://localhost/cgi-bin/mapserv?map=/bench/bench.map&
“wfs_srs” “EPSG:4326”
END
END

Projection (shared by all layers)

PROJECTION
“init=epsg:4326”
END

STATE_POLYGONS

LAYER
NAME states
METADATA
“wms_title” “Distribution of population in USA, polygons”
END
PROCESSING “CLOSE_CONNECTION=DEFER”
DATA states
STATUS OFF
TYPE POLYGON
LABELITEM “STATE_ABBR”

CLASS
NAME ‘less than 2M’
EXPRESSION ([PERSONS] < 2000000)
STYLE
COLOR 77 255 77
OUTLINECOLOR 0 0 0
END
END

CLASS
NAME ‘between 2M and 4M’
EXPRESSION (2000000 <= [PERSONS] AND [PERSONS] < 4000000 )
STYLE
COLOR 255 77 77
OUTLINECOLOR 0 0 0
END
END

CLASS
NAME ‘more than 4M’
EXPRESSION ([PERSONS] >= 4000000 )
STYLE
COLOR 77 77 255
OUTLINECOLOR 0 0 0
END
END

CLASS
NAME ‘labels’
LABEL
COLOR 0 0 0
ANTIALIAS FALSE
TYPE TRUETYPE
FONT “Times”
SIZE 12
POSITION CC
PARTIALS FALSE
END
END
END

End of map file

END


Iscriviti all’associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
Gfoss@faunalia.com
http://www.faunalia.com/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell’Associazione GFOSS.it.

Fabio D'Ovidio ha scritto:

Ciao Andrea,
grazie della precisazione :wink:

Credo di aver capito il tuo problema...cioè, le etichette devi aggiungerle per ciascuna classe. Forse è per questo che non vengono generate.

Aahh, grazie! Si, era proprio quello, se le ripeto in ogni
classe vengono disegnate. Non è una virgola più veloce della
versione con tre layer però...
Allego il mapfile nella versione corrente: altri suggerimenti? :slight_smile:

PS: tra l'altro non ho visto settato CLASSITEM nel tuo map file...

Hum, per quel che vedo è necessario usarlo
solo se lo si usa per pilotare la divisione in classi, la doc. non
parla di etichette (per quelle ho messo "LABELITEM"). Ho provato
a inserirlo comunque, per scrupolo, nel mapfile original che aveva le label separate, ma non è cambiato nulla...

Ciao
Andrea

Fabio D'Ovidio ha scritto:

...dimenticavo, perchè dici che MapServer non si può usare con OL ?

Non si può con OL + tiling senza mettere di mezzo qualcosa che faccia
meta tiling come ka-map o TileCache, il che va bene solo per carte
statiche. GeoServer ha un paio di vendor parameter nella GetMap
che consentono di attivare un meta-tiling "al volo" con meta tile
3x3.

Ti allego due mappe, una fatta da MapServer + OL, l'altra fatta dalla
preview di GeoServer (OL + geoserver + metatile on the fly attivato).

Dato lo stesso client OL con uso di tiles 256x256 (per far lavorare GS e MS nelle stesse condizioni) si notano due difetti nella mappa prodotta
da Mapserver:
1) duplicazione spinta di etichette dovuta all'assenza di meta tiling
    (ricorda che quello che vedi è una screenshot, la visualizzazione
    è fatta di tile 256x256)
2) un piccolo difetto di campitura al confine fra Iowa e Nebraska,
    c'è del bianco fra il bordo nero del confine e la campitura
    rossa dell'Iowa

Inoltre se fai caso ai font noterai che le W e le S prodotte da
MapServer hanno dei "buchi" (l'antialiasing è stato disabilitato
in entrambe i server per ottenere il massimo delle prestazioni nei
benchmark che sto preparando).

Ciao
Andrea

PS: se ve lo state domandando, no, questa non è una anticipazione della mia presentazione, di questioni di qualità della mappa non parlerò, non c'e' tempo.

mapserverStatesTiled.png

geoserverStatesTiled.png

Andrea Aime ha scritto:

Allego il mapfile nella versione corrente: altri suggerimenti? :slight_smile:

Sigh, la vecchiaia... ecco il mapfile.
Ciao
Andrea

bench.map (2.13 KB)

Il domenica 17 febbraio 2008, Andrea Aime ha scritto:

Fabio D'Ovidio ha scritto:
> ...dimenticavo, perchè dici che MapServer non si può usare con OL ?

PS: se ve lo state domandando, no, questa non è una anticipazione della
mia presentazione, di questioni di qualità della mappa non parlerò, non
c'e' tempo.

Sarà veramente interessante!

Riuscirai anche a confrontare le prestazioni con e senza antialiasing e con il
nuovo rendering driver AGG di mapserver?

--
Alessandro Pasotti
itOpen - "Open Solutions for the Net Age"
w3: www.itopen.it
Linux User# 167502

Alessandro Pasotti ha scritto:

Il domenica 17 febbraio 2008, Andrea Aime ha scritto:

Fabio D'Ovidio ha scritto:

...dimenticavo, perchè dici che MapServer non si può usare con OL ?

PS: se ve lo state domandando, no, questa non è una anticipazione della
mia presentazione, di questioni di qualità della mappa non parlerò, non
c'e' tempo.

Sarà veramente interessante!

Riuscirai anche a confrontare le prestazioni con e senza antialiasing e con il nuovo rendering driver AGG di mapserver?

Mah, mi hanno dato 15 minuti e per i bench non posso spenderne più di 3, quindi no, ma sa che farò tutto senza antialiasing (vorrei fare un paio
di bench anche sui raster e su WFS visto che a Victoria non erano
stati affrontati).
Cmq, ho provato a mettere in piedi la solita mappa topp:states di Geoserver con MapServer + AGG e il risultato è... bruttino,
giudica con i tuoi occhi, in allegato le mappe prodotte
da MapServer (con AGG) e da GeoServer (con antialiasing attivato),
in entrambi i casi usando la quantizzazione al volo per ridurre
la dimensione dell'immagine (la qualità grafica non ne risente,
sono praticamente indistinguibili rispetto a quelle full color).

Ciao
Andrea

mapserverAntialiasQuantize.png

geoserverAntialiasQuantized.png