utilisation de GDAL / OGR api pour lire des données vectorielles (shapefile) - Comment?

StackOverflow https://stackoverflow.com/questions/340185

  •  19-08-2019
  •  | 
  •  

Question

Je travaille sur une application qui implique des choses gis. Il y aurait des fichiers .shp à lire et à tracer sur un écran ouvert. L’écran opengl actuel utilise la projection orthographique définie dans glOrtho () et affiche déjà une carte utilisant les coordonnées d’un simple fichier texte.

La carte à tracer doit maintenant être lue à partir d'un fichier de formes.

J'ai les doutes suivants:

  1. Comment utiliser la projection WGS84 du fichier .shp (lue à partir du fichier .prj du fichier de formes, format WKT) dans ma projection glOrtho existante ... existe-t-il une conversion à effectuer? et comment est-il différent de ce que glOrtho () installe? comment utiliser cette information?

  2. Mon application doit être configurée de telle sorte que je puisse connaître le lat / long exact d'un point de la map.Par exemple. Je sais que cela peut être fait en utilisant des outils opensource / apis comme GDAL / OGR mais je suis foiré car la documentation de ces apis n'entre pas dans mes tête. J'ai essayé de trouver des exemples de progs c ++, mais je n'ai pas réussi à en trouver un.

  3. J'ai déjà écrit ma propre logique pour lire les coordonnées à partir d'un fichier de formes contenant des points / polyligne / polygone (à l'aide de C-shapelib) et tracées sur mon écran opengl.J'ai trouvé un exemple de code OGR dans doc à lire Un fichier de formes POINTS, mais aucun pour le fichier de formes POLYGON. Et le problème est que cette application doit être tellement dynamique que lors du chargement du fichier de formes, elle doit configurer correctement la projection de l'écran opengl en fonction de la projection du fichier .shp en cours de lecture. par exemple, WGS84, LCC, EVEREST MODIFIED ... etc. comment y parvenir depuis l’API OGR?

Nous vous saurions gré de bien vouloir donner votre avis sur ce problème. Je tiens vraiment à ce que cela fonctionne, mais je ne prends pas le bon départ.

Était-ce utile?

La solution

  1. Le rendu des fichiers de formes est assez simple sous OpenGL. Vous pouvez avoir besoin de "shapelib", une bibliothèque d’analyses de fichiers de formes libre en C (Google it). Utilisez GL_POINTS pour le fichier de formes de points, GL_LINES pour le fichier de forme de ligne et GL_LINE_LOOP pour le fichier de forme de polygone. Définissez vos coordonnées du cadre de sélection sur l’ortho.

  2. Ce que vous lisez dans le fichier .prj, ce sont des informations de projection. WGS84 vous donne des coordonnées lat / long (sphériques). Mais votre système d’affichage est en 2D (rectangulaire). Il faut donc convertir les liaisons sphériques 3D en liaisons rectangulaires 2D (c’est le sens de projection). Les types de projection sont nombreux, en fonction de la zone d’intérêt sur le globe (rappelez-vous que la projection déforme la zone / forme / taille des entités) .Projection les types vont de Polyconic, Everest modifié, NAD, UTM, etc.,

  3. Si vous avez simplement besoin de WGS84, lisez les coordonnées de votre fichier .sh et attribuez-les à glOrtho. Si vous avez une projection (par exemple: -UTM), vous convertissez vos coordonnées de cadre de sélection en coordonnées de projection, puis vous affectez les nouvelles coordonnées projetées à glOrtho. Pour convertir les lat / long en n'importe quelle projection, vous pouvez avoir besoin de bibliothèques de projection du type "Projlib". ou "GeotransEngine" et etc.

Pour plus de précisions, vous pouvez me contacter sur dgplinux @ y a h o o. c o m

Autres conseils

Veuillez lire le Didacticiel de l'API OGR pour apprendre à lire des données vectorielles à partir de des sources comme Shapefile. Ensuite, consultez le Didacticiel sur les projections OGR pour en savoir plus sur l'utilisation des informations de projection et de projection spatiale. système de référence lu à partir de sources OGR.

GDAL / OGR a tout ce dont vous avez besoin pour charger un fichier vectoriel, puis convertir les coordonnées. Je comprends votre frustration avec GDAL car la documentation n’est pas la meilleure. Si vous souhaitez une bonne introduction à l'API, consultez gdalinfo.c et ogrinfo.cpp dans l'arborescence de la sous-version de GDAL. La source peut être consultée à l'adresse https://svn.osgeo.org/gdal/trunk/gdal

Si cela ne vous aide pas, j’utilise deux exemples élémentaires pour analyser les informations de vecteur et effectuer la conversion de coordonnées. Ils sont vraiment mauvais, mais ils peuvent aider à obtenir le point.

Chargement de vecteur

Conversion de coordonnées

Enfin, si vous n'êtes pas familiarisé avec les formats SIG, nous vous conseillons de lire l'introduction d’ArcGIS ici sous Livres de guides / Projections cartographiques . Je peux rivaliser avec des experts malgré l'absence de formation en cartographie grâce à ces guides. Une autre bonne source est Wikipedia.

En cas de doute, choisissez une grille UTM que vous souhaitez conserver et utilisez UTM comme système de coordonnées. Il utilise X (est), Y (nord) et Z (altitude). La seule clé est de choisir une seule grille UTM et de s’assurer que toutes les coordonnées l’utilisent comme référence. Il est facile de tester le code UTM, car il existe de nombreux guides en ligne. Vous pouvez également trouver le code de conversion en utilisant OGR / GDAL ou d'autres ressources. D'autres systèmes de coordonnées projetés en valent la peine et pourraient être meilleurs, mais je commencerais par regarder cela.

Enfin, si tout le reste échoue, jetez un oeil à la NGA GeoTrans. C'est un excellent outil de test.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top