Использование GDAL / OGR API для чтения векторных данных (шейп-файл) - Как? - PullRequest
1 голос
/ 04 декабря 2008

Я работаю над приложением, которое включает в себя некоторые вещи ГИС. Там будут некоторые файлы .shp для чтения и печати на экране OpenGL. Текущий экран opengl использует ортографическую проекцию, установленную из glOrtho(), и уже отображает карту с использованием координат из простого текстового файла.

Теперь карта, которую нужно построить, должна читаться из шейп-файла.

У меня есть следующие сомнения:

  1. Как использовать проекцию WGS84 файла .shp (как считывается из файла .prj шейп-файла, формат WKT) в мою существующую проекцию glOrtho ... Есть ли какое-либо преобразование, которое необходимо сделать? и чем он отличается от того, что устанавливает glOrtho ()? в основном, как использовать эту информацию?

  2. Мое приложение должно быть настроено таким образом, чтобы я мог знать точный широту / длину точки на карте. Например, если я нахожусь в X city, его правильный lat / long может быть получен. Я знаю, что это может быть сделано с помощью utils / apis с открытым исходным кодом, как GDAL / OGR, но я запутался, поскольку документация этих API не попадает в мой голова. Я пытался найти примеры прог с ++, но не смог найти.

  3. Я уже написал свою собственную логику для чтения координат из шейп-файла, содержащего точки / полилинии / многоугольник (используя C-shapelib) и нанесенного на график на моем экране opengl. Я нашел пример кода OGR в doc для чтения шейп-файл POINTS, но не для шейп-файла POLYGON. И проблема в том, что это приложение должно быть настолько динамичным, что при загрузке шейп-файла оно должно правильно настроить проекцию экрана opengl в зависимости от проекции читаемого файла .shp. например, WGS84, LCC, EVEREST MODIFIED ... и т. д. как этого добиться от OGR api?

Пожалуйста, внесите свой вклад в эту проблему .. Я действительно заинтересован в том, чтобы сделать эту работу, но я не начинаю правильно ..

Ответы [ 3 ]

2 голосов
/ 24 января 2010

Пожалуйста, прочитайте Учебное пособие по API OGR , где вы можете узнать, как читать векторные данные из таких источников, как Shapefile. Далее, посмотрите Учебное пособие по прогнозированию OGR , где вы можете узнать, как использовать информацию о проекции и системе пространственной привязки, считанную из источников OGR.

2 голосов
/ 23 декабря 2008
  1. Рендеринг шейп-файлов в OpenGL довольно прост. Вам может потребоваться «shapelib», бесплатная библиотека для разбора шейп-файлов на C (Google it). Используйте GL_POINTS для точечного шейп-файла, GL_LINES для шейп-файла линии и GL_LINE_LOOP для шейп-файла полигона. Установите координаты ограничивающего прямоугольника в Орто.

  2. То, что вы читаете из файла .prj, является информацией о проекции. WGS84 дает координаты широты / долготы (сферические). Но ваша система отображения 2D (прямоугольная). Таким образом, вам необходимо преобразовать 3D сферические координаты в 2D прямоугольные координаты (в этом смысл проекции). Типы проекций многочисленны, в зависимости от области интереса на глобусе (помните, что проекция искажает область / форму / размер объектов). Типы варьируются от Polyconic, Modified Everest, NAD, UTM и т. д.,

  3. Если вам просто нужен WGS84, прочитайте координаты ограничивающего прямоугольника вашего .sh-файла и присвойте их glOrtho. Если у вас есть какая-либо проекция (например, -UTM), то вы конвертируете координаты ограничивающего прямоугольника в координаты проекции, а затем присвойте вновь спроецированные координаты glOrtho. Для преобразования lat / long в любой Projection вам могут потребоваться такие библиотеки проекций, как «Projlib» или «GeotransEngine» и т. Д.

Для дальнейших разъяснений вы можете связаться со мной по адресу dgplinux @ y a h o o. с м

0 голосов
/ 07 июля 2014

В GDAL / OGR есть все, что нужно для загрузки векторного файла, а затем для преобразования любых координат. Я понимаю ваше разочарование GDAL, так как документация не самая большая. Если вы хотите получить хорошее представление об использовании API, посмотрите gdalinfo.c и ogrinfo.cpp в дереве подрывной деятельности GDAL. Источник можно увидеть на https://svn.osgeo.org/gdal/trunk/gdal.

Если это не поможет, у меня есть два основных примера, которые я использую для анализа векторной информации и преобразования координат. Они действительно плохие, но они могут помочь понять суть.

Векторная загрузка

Преобразование координат

Наконец, если вы не знакомы с форматами ГИС, я бы рассмотрел введение в ArcGIS здесь в разделе Guide Books / Map Projections. Я могу конкурировать с экспертами, несмотря на отсутствие обучения картографии из-за этих руководств. Еще один хороший источник - это Википедия.

Если вы сомневаетесь, просто выберите сетку UTM, которую вы хотите придерживаться, и используйте UTM в качестве вашей системы координат. Он использует X (восток), Y (север) и Z (высота). Единственным ключом является выбор единой таблицы UTM и проверка того, что все координаты используют ее как ссылку. С UTM легко тестировать код, так как в Интернете много руководств. Вы также можете найти код конверсии, используя OGR / GDAL или другие ресурсы. Другие проектируемые системы координат имеют смысл и могут быть лучше, но я бы хотел начать с этого.

Наконец, если ничего не помогает, взгляните на NGA GeoTrans. Это отличный инструмент для тестирования.

...