[OSM-dev-fr] [SQL] utilisation de ST_Difference

Nicolas Dumoulin nicolas_openstreetmap.org at dumoulin63.net
Mar 28 Déc 17:11:35 GMT 2010


Bonjour,

Je souhaite utiliser la limite administrative pour dessiner un polygone 
couvrant ce qui n'est pas dans la commune. Pour cela, il faut que je fasse un 
ST_Difference entre la bbox de mon image et le way de ma limite de commune.
J'ai essayé en vain dans mon script python un truc dans le genre :

# bbox
ll = (3.098,45.739,3.1543,45.764)
# … j'ajoute mes styles, mes couches toussa …
# j'utilise la bbox pour construire une geometry en sql
points=" ".join([str(i) for i in ll])
bb_geometry="ST_GeomFromText('POINT("+points+")', 900913)"
# je fais ma différence comme ça
table = "(select ST_DIFFERENCE("+bb_geometry+",way) " +
 "as way from planet_osm_polygon where name='Aubière') as roads"
# et je crée ma couche comme ça
layer = mapnik.Layer('admin-clip', "+proj=latlong +datum=WGS84")
layer.datasource = 
mapnik.PostGIS(host='localhost',port='5434',user='mapnik',password='mapnik',dbname=dbname,table=table)
# et je zoom sur ma bbox classiquement
prj = mapnik.Projection("+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 
+lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over")
c0 = prj.forward(mapnik.Coord(ll[0],ll[1]))
c1 = prj.forward(mapnik.Coord(ll[2],ll[3]))
m.zoom_to_box(mapnik.Envelope(c0.x,c0.y,c1.x,c1.y))

En fait, si j'inverse mon way et ma bbox dans le ST_Difference, j'ai bien le 
polygone de ma commune, mais dans le bon sens, rien ne s'affiche.
Une idée ?

Merci

-- 
Nicolas Dumoulin
http://wiki.openstreetmap.org/wiki/User:NicolasDumoulin



More information about the dev-fr mailing list