2009-10-21 5 views
0

Mon objectif est d'afficher différentes formes (polygones, points, lignes) sur google maps en utilisant dynamiquement les données saisies dans une base de données Postgis (je veux dire par là que nous pouvons voir les modifications en temps réel). Je cherchais un moyen de faire cela en utilisant la structure spatiale déjà fournie en postgis (indiquant déjà si la forme est une ligne ou un polygone, etc.) au lieu d'analyser les coordonnées puis de réintégrer la structure spatiale dans google maps. J'ai vu que google maps api est maintenant compatible avec les formats de données kml. Et puis j'ai lu que je dois convertir les données postgis au format kml. J'ai lu dans les forums le processus actuel de conversion des données postgis en kml via FWTools, mais je n'ai rien vu qui puisse m'aider. Je suis nouveau à kml mais je suis familier avec postgis et perl et PHP. Existe-t-il un tutoriel sur le processus de conversion des données postgis en kml? Où puis-je commencer? Merci pour toute aidegestion de carte dynamique dans google earth

Répondre

1

Vous pouvez obtenir une représentation textuelle des données spatiales d'une base de données Postgres en utilisant une fonction de conversion de texte, comme

SELECT AsText(MyGemoetry) from MyTable 

alors vous analysez la chaîne, créez vos objets en utilisant différentes fonctions de l'API - en fonction du type de géométrie PostGIS - et ajoutez ces objets à l'objet plugin GE principal d'une manière DOM.

Si vous êtes familier avec JavaScript et avoir une connaissance de base de XML, un bon départ est http://code.google.com/apis/earth/documentation/reference/

Ne pas oublier de préciser ID uniques à vos objets afin que vous puissiez les retrouver plus tard pour déposer/modifier. Peut-être que vous pouvez obtenir quelques inspirations here, afficher le fichier "locator.js" lié et regarder la fonction PaintSubField (Coord) ... c'est une autre façon, peu grossière mais efficace, en évitant de déranger avec trop de particuliers objets parent/enfant et structures

vous pouvez également consulter sample applications et utiliser le code playground pour « temps réel », vous avez besoin d'au moins un événement « prototypage rapide »

re que vous pouvez lier votre génération/redessiner routines à .

Bonne chance MikeD

+0

D'après mon expérience, la solution de tcarobruce fonctionne beaucoup mieux. Essayer d'analyser le texte à la main est exagéré quand il y a déjà une fonction pour le faire. – Adam

+0

@Adam: J'ai tendance à être d'accord avec vous, sauf dans le cas où je veux obtenir seulement de petites informations d'un format Geo et en créer un autre. Habituellement, les Geoformats sont surchargés de choses dont je n'ai pas besoin (.... Donne-moi que LAT/LON ;-). Cela dit, il est vrai que je n'ai pas exploré ST_AsKML() jusqu'à présent. – MikeD

4

Vous pouvez utiliser PostGIS pour convertir en KML directement:

SELECT ST_AsKML(geometry) from MyTable; 

ST_AsKML est l'un de plusieurs formats de sortie, y compris WKT, GML, GeoJSON, etc.

Pour afficher des données dynamiques dans Google Earth, un modèle courant consiste à utiliser KML avec un élément NetworkLink. Avoir le lien viewRefreshMode égal à onStop et Google Earth fera des demandes (à une URL desservie par PHP, vraisemblablement) avec des paramètres de boîte de délimitation attachés. Utilisez le cadre de sélection pour interroger les entités de la base de données PostGIS et renvoyer les résultats au format kml. C'est génial si vous avez beaucoup, beaucoup de fonctionnalités, mais ne voulez récupérer que ceux dans la région que l'utilisateur regarde.

Selon la complexité de votre application, vous pouvez également regarder GeoDjango. (La familiarité avec PostGIS est une grande longueur d'avance!)

Questions connexes