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

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

  •  19-08-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

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

    Это было полезно?

    Решение

    <Ол>
  • Рендеринг шейп-файлов в OpenGL довольно прост. Вам может потребоваться & Quot; shapelib & Quot; бесплатная библиотека разбора шейп-файлов на C (Google it). Используйте GL_POINTS для точечного шейп-файла, GL_LINES для шейп-файла линии и GL_LINE_LOOP для шейп-файла полигона. Установите координаты ограничивающего прямоугольника в Орто.

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

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

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

    Другие советы

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

    В 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. Это отличный инструмент для тестирования.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top