#1 Tue 25 May 2010 22:49
- seb.49
- Participant occasionnel
- Date d'inscription: 5 Jun 2009
- Messages: 19
Créer un référentiel des rues a partir de données OSM
Bonjour,
Pour les besoins d'une application ASP.NET / Sql Server 2008, je dois intégrer un référentiel des rues de certaines grosses villes française.
N'y connaissant pas grand chose en SIG, j'ai quand meme trouvé chez gisgraphy.com, un fichier OpenStreetMap qui ressemble à ce que je recherche (http://download.gisgraphy.com/openstreetmap/)
Ce fichier ne contient à priori pas d'information permettant de retrouver la ville correspondant à la rue mais il contient la position géographique du centre des rues. Avec ca et un fichier contenant les limites de communes (fichier que je n'ai pas), je pense pouvoir m'en sortir.
Cependant, la position du centre des rues est au format HEXEWKB. J'ai beau cherché, avec PostGis (et Google), je ne parviens pas à transformer cette donnée en information que je puisse utilisée (ex: Point(Lat, Long))
L'objet de ce post est donc de répondre à plusieurs questions :
1 - Est ce que je suis sur la bonne voir pour me constituer ce référentiel d'adresse ?
2 - Y a t-il un moyen de convertir ce HEXEWKB en donnée utilisable avec PostGis ?
3 - Si la réponse à la question est oui, je pense que je pourrais faire la même chose avec Sql Server 2008 (à la rigueur en passant par PostGis avant d'intégrer les données), non ?
Merci de m'avoir lu.
Hors ligne
#2 Wed 26 May 2010 01:32
Re: Créer un référentiel des rues a partir de données OSM
Bonsoir,
1 - Est ce que je suis sur la bonne voir pour me constituer ce référentiel d'adresse ?
Sans réponse, je ne travaille pas sur le sujet.
2 - Y a t-il un moyen de convertir ce HEXEWKB en donnée utilisable avec PostGis ?
Code:
SELECT ST_AsText('01010000200400000000000000000000000000000000000000'); SELECT ST_X(ST_AsText('01010000200400000000000000000000000000000000000000')); SELECT ST_Y(ST_AsText('01010000200400000000000000000000000000000000000000'));
3 - Si la réponse à la question est oui, je pense que je pourrais faire la même chose avec Sql Server 2008 (à la rigueur en passant par PostGis avant d'intégrer les données), non ?
http://www.bostongis.com/?content_name= … ompare#178 pour une petite comparaison
Pour les références des fonctions spatiales http://msdn.microsoft.com/fr-fr/library … .105).aspx pour voir si les fonctions répondront à vos problématiques.
Si vous devez utiliser OpenStreetMap (en respectant la licence), http://www.google.fr/search?hl=fr&s … p;gs_rfai= vous renvoie vers des manipulations utilisant du .Net
Cordialement
ThomasG
Hors ligne
#3 Wed 26 May 2010 06:54
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3195
- Site web
Re: Créer un référentiel des rues a partir de données OSM
Bonjour,
Pour la question 1: idem Thomas.
Pour les reste, pourquoi passer par PostGis avant d'aller vers SQLServer, ou inversement pourquoi utiliser SQLserver2008 au lieu de PostGis ? On se connecte très bien à PostGis depuis .Net avec Npgsql.
Ensuite vous pouvez utiliser directement le format wkb pour le transformer en objet géométrique, cela sera plus rapide que de passer par une conversion vers un format texte (wkt). Pour cela il faut consulter la page de l'OGC sur les standards (WKB, WKT) qui donne une description complète du format Voir cette discussion :
http://georezo.net/forum/viewtopic.php?id=67132
un exemple de code en VB.Net aisément traduisible en asp.net pour lire le wkb :
http://www.developpez.net/forums/d92287 … x-doctets/
A+
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#4 Wed 26 May 2010 09:22
- seb.49
- Participant occasionnel
- Date d'inscription: 5 Jun 2009
- Messages: 19
Re: Créer un référentiel des rues a partir de données OSM
Bonjour et merci pour vos réponses.
@ThomasG
Super le SELECT ST_AsText('01010000200400000000000000000000000000000000000000'); ca marche avec PostGis mais y a til un équivalent Sql Server 2008 comme ca je pourrais tout faire dans Sql Server
[EDIT] Il semble que ce soit possible avec Sql Server 2008 R2 (mais je ne l'ai pas) http://msdn.microsoft.com/en-us/library/bb933954.aspx [/EDIT]
@Christophe V.
C'est comme ça, l'architecture est full Microsoft, l'application n'est pas réellement un SIG mais utilise quelques fonction de SIG quand même.
Je serais ravi de pouvoir tous faire en Sql Server directement mais comme je pense qu'il n'est pas possible de lire les HEXEWKB avec Sql Server, je voulais utiliser POstGis entre les deux.
C'est pour ma moulinette interne car une fois le référentiel des rue des villes faits, on y touche plus de facon automatique.
Encore merci pour vos réponse et si vous pouvez m'aiguiller pour faire marcher SELECT ST_AsText('01010000200400000000000000000000000000000000000000'); en SqlServer, je suis très interessé
Dernière modification par seb.49 (Wed 26 May 2010 09:51)
Hors ligne
#5 Wed 26 May 2010 10:06
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3195
- Site web
Re: Créer un référentiel des rues a partir de données OSM
Bonjour,
Je suppose depuis le début que ce que tu nommes du HEXEWKB est en fait du WKB sous forme hexadécimale. Donc pour intégrer ta source de donnée en WKB directement dans ta base sqlserver2008 il existe des fonctions comme
STGeomFromWKB ( 'WKB_geometry' , SRID ) voir en fait la MSDN ici:
http://msdn.microsoft.com/fr-fr/library/bb933894
Pour le fait du full Microsoft j'ai rien contre je développe moi même en .Net constamment.
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#6 Wed 26 May 2010 10:54
- seb.49
- Participant occasionnel
- Date d'inscription: 5 Jun 2009
- Messages: 19
Re: Créer un référentiel des rues a partir de données OSM
dans le descritpif du fichier OSM que j'ai il y a
3 : location; The middle point of the street in HEXEWKB
Code:
STGeomFromWKB ( 'WKB_geometry' , SRID ) voir en fait la MSDN ici:
ca fonctionne bien pour les données geometry mais pas geography.
Désolé, je suis vraiement un newbies sur ces questions spatiales et autant dire que je plane un peu.
Hors ligne
#7 Wed 26 May 2010 11:59
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3195
- Site web
Re: Créer un référentiel des rues a partir de données OSM
Bonjour,
Un peu de lecture:
http://technet.microsoft.com/fr-fr/libr … 64711.aspx
Et apparemment les méthodes sont surchargées, elles prennent en compte les deux types geography et geometry
http://msdn.microsoft.com/en-us/library … .105).aspx
A+
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#8 Wed 26 May 2010 13:45
- seb.49
- Participant occasionnel
- Date d'inscription: 5 Jun 2009
- Messages: 19
Re: Créer un référentiel des rues a partir de données OSM
En effet, ca marche avec
Code:
select geography::STGeomFromText('POINT (7.06793398474461 49.2990657559392)', 4326).STAsBinary() --qui renvoi 0x01010000006D0F8B7C90451C40638E64C947A64840 select geography::STGeomFromWKB(0x01010000006D0F8B7C90451C40638E64C947A64840, 4326)
maintenant, je cherche comment convertir ça :
0101000000670F8B7C90451C40608E64C947A64840
qui vient de OSM et qui donne grace à PostGis POINT(7.06793398474461 49.2990657559392)
directement via SqlServer
Hors ligne
#9 Wed 26 May 2010 13:57
- seb.49
- Participant occasionnel
- Date d'inscription: 5 Jun 2009
- Messages: 19
Re: Créer un référentiel des rues a partir de données OSM
En effet, ca marche avec
Code:
select geography::STGeomFromText('POINT (7.06793398474461 49.2990657559392)', 4326).STAsBinary() --qui renvoi 0x01010000006D0F8B7C90451C40638E64C947A64840 select geography::STGeomFromWKB(0x01010000006D0F8B7C90451C40638E64C947A64840, 4326)maintenant, je cherche comment convertir ça :
0101000000670F8B7C90451C40608E64C947A64840
qui vient de OSM et qui donne grace à PostGis POINT(7.06793398474461 49.2990657559392)
directement via SqlServer
[EDIT]
Oh je suis fatigué ou quoi moi
Code:
OSM donne______01010000006D0F8B7C90451C40638E64C947A64840 SQL veut____ 0x01010000006D0F8B7C90451C40638E64C947A64840
j'ai juste à faire une requete select geography::STGeomFromWKB(0x" + DATA_OSM + ", 4326) et ca marche[/EDIT]
Hors ligne
#10 Wed 26 May 2010 13:58
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3195
- Site web
Re: Créer un référentiel des rues a partir de données OSM
Bonjour
Tu es sur de ton :
0101000000670F8B7C90451C40608E64C947A64840
Qui ne diffère que de deux "caractères" par rapport à la chaîne que tu a écrite dans la fenêtre code ? (on oublie le 0x )
Si tu injecte directement ce qui te viens d'OSM dans STGeomFromWKB tu obtiens quoi ?
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#11 Wed 26 May 2010 13:59
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3195
- Site web
Re: Créer un référentiel des rues a partir de données OSM
Suite à l'Edit:
Je préfère !!
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne