#1 Sat 10 September 2016 09:43
- Louiszen
- Juste Inscrit !
- Date d'inscription: 12 Jul 2016
- Messages: 9
Les seuils de visibilité dans un mapfile
Bonsoir,
Je suis en train de rédiger un mapfile que je compte appeler en fond avec openlayers. Mon mapfile s'affiche très bien dans le navigateur mais je n'arrive pas à faire apparaitre et disparaitre les couches ainsi que leurs labels en fonction des échelles. Je suis perdu entre les Maxscaledenom, Labelmaxscale... mais je réuissi à afficher correctement les labels sans y inclure les seuils de visibilité. Bref, ci-dessous une copie du mapfile. J'aimerai que la couche "routier" disparaisse à 1/5000 et n'apparaisse qu'à partir de 1/50000. SVP que quelqu'un de plus expérimenté m'aide à intégrer ces fonctionnalités dans mon mapfile. Merci!
#############copie du mapfile###############
LAYER
NAME "routier"
STATUS DEFAULT
TYPE LINE
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=test user=postgres password=postgres host=localhost port=5432"
DATA "geom from routier using unique gid using srid=32632"
CLASSITEM 'type2'
LABELITEM 'name'
CLASS
EXPRESSION "Principale"
STYLE
WIDTH 4
COLOR 76 38 0
END#style
STYLE
WIDTH 2
COLOR 253 191 111
END#style
LABEL
FONT ARIAL
TYPE truetype
SIZE 8
COLOR 0 0 0
ANGLE 0
POSITION uc
FORCE true
ANTIALIAS true
PARTIALS true
END#label
END#class
PROJECTION
"init=epsg:32632"
END#projection
END#layer
END#map
Hors ligne
#2 Mon 12 September 2016 10:35
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
Re: Les seuils de visibilité dans un mapfile
Bonjour.
Pour les seuils d'affichage de la géométrie vous allez utiliser, MAXSCALEDENOM, MINSCALEDENOM, SYMBOLSCALEDENOM dans la définition du layer. Pour le texte vous allez, dans la définition du layer, utiliser LABELMINSCALE et LABELMAXSCALE.
Dans la définition du syle ou du label vous allez jouer avec le MINSIZE ou MAXSIZE pour adapter la taille des objets à l'échelle.
Ci-dessous un exemple qui fonctionne sur du ponctuel :
Code:
LAYER METADATA "TITLE" "test" END CONNECTION "user=postgres password=dbname= host= " CONNECTIONTYPE POSTGIS DATA "wkb_geometry from v_sites_details USING UNIQUE ogc_fid" GROUP "Administrations et services" MAXSCALEDENOM 50100 MINSCALEDENOM 0 SYMBOLSCALEDENOM 500 NAME "admin" STATUS ON TOLERANCE 3 TYPE POINT UNITS METERS LABELMINSCALE 0 LABELMAXSCALE 5100 LABELITEM "nom_court" CLASS EXPRESSION xxx NAME "" TITLE "xxx" STYLE SYMBOL "fond_rond" SIZE 15 MINSIZE 13 MAXSIZE 31 COLOR 248 236 7 END LABEL TYPE TRUETYPE FONT "ARIBLK" SIZE 8 MINSIZE 8 MAXSIZE 11 POSITION CL BUFFER 0 COLOR 240 78 0 OUTLINEWIDTH 4 OUTLINECOLOR 255 255 254 PARTIALS TRUE FORCE TRUE MAXLENGTH 9 WRAP ' ' END END END
Cordialement
JP
Hors ligne
#3 Tue 13 September 2016 22:14
- Louiszen
- Juste Inscrit !
- Date d'inscription: 12 Jul 2016
- Messages: 9
Re: Les seuils de visibilité dans un mapfile
Ok, merci bien!
Cependant, j'ai un autre problème qui cette fois me traumatise seulement. Je n'arrive pas à intégrer le mapfile crée avec openlayers 2. J'ai pourtant essayé de nombreuses techniques d'appel de la couche, le résultat est toujours déplorable jusqu'à présent. Je reçois soit une carte très petite (à peine visible), ou alors une carte qui est dans un autre système de projection. Quand j'essaie d'afficher le mapfile tout simplement dans le navigateur, il s'affiche très bien même. Mais dès que j'essaie de l'appeler avec openlayers c'est là où les maux de tête commencent. Je suis dépassé!
Ci-joint le code openlayers que j'utilise pour afficher le mafile:
***********OpenLayers 2 mapfile*******************
function init() { var epsg4326 = new OpenLayers.Projection("EPSG:4326");
map = new OpenLayers.Map('map', {
controls: [
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.LayerSwitcher({'ascending':false}),
new OpenLayers.Control.Permalink(),
new OpenLayers.Control.ScaleLine(),
new OpenLayers.Control.Permalink('permalink'),
new OpenLayers.Control.MousePosition({displayProjection: epsg4326}),
new OpenLayers.Control.OverviewMap(),
new OpenLayers.Control.KeyboardDefaults()
],
numZoomLevels: 8
});
routier = new OpenLayers.Layer.WMS( "Routier",
"http://localhost/cgi-bin/mapserv.exe?map=C:/ms4w/Apache/htdocs/****/****/mapfiles/routier.map&mode=map", {layers: 'routier'},
{singleTile: true} );
map.addLayers([routier]);
map.addLayer(vector);
map.setCenter(10.18141,5.1995);
}
Hors ligne