Получить информацию из файла данных карты по координатам - PullRequest
0 голосов
/ 13 декабря 2011

Представьте, что у меня есть файл формы карты (.shp) или osm xml, я могу видеть различные виды данных из разных слоев в программах, ориентированных на ГИС, например, ArcGIS, QGIS и т. Д. Но как я могу получить эту информацию программно?Для этого есть специальная библиотека?Что я действительно ищу, так это какой-то метод getMapData (долгота, широта) для получения информации о ландшафте / местности (например, лес, река, город, шоссе) в указанном месте

Заранее спасибо за ваши ответы!

Ответы [ 3 ]

1 голос
/ 21 декабря 2011

Все еще зависит, чего вы хотите достичь, лучше ли вам использовать растровые или векторные данные.

Если вы используете свою сетку для разделения области в виде массива контейнеров для географических объектов, то придерживайтесь векторных данных.Для этого я бы создал файл сетки полигонов и пересек его с каждым из ваших слоев данных.Затем вы можете добавить поле идентификатора, которое представляет местоположение ячейки в массиве (и, следовательно, это относительное положение к известной координате широта / долгота - скажем, слева внизу).В качестве альтернативы вы можете использовать пространственные запросы для доступа к вашим данным, выбрав многоугольник в файле векторной сетки, а затем найдя все содержащиеся в нем элементы в вашем другом файле.

OTOH, если вы хотите провести многофункциональный анализ на основе присутствия / отсутствия, тогда вам, возможно, будет лучше пойти по пути растрового анализа.Из того, что вы сказали, я чувствую, что это то, чего вы пытаетесь достичь, но я все еще не уверен на 100%.Вы бы справились с этим, создав набор логических растров подходящего разрешения, а затем выполнив математические операции над множеством (сложение, вычитание, усреднение и т. Д. - в зависимости от того, какие вопросы вы задаете).

Допустим, выглядя на миграцию животных.Допустим, ваша модель предполагает, что потоки, живые изгороди и города являются препятствиями для миграции, но дороги только снижают вероятность пересечения области.Таким образом, вы преобразуете свои препятствия в значение «1», а NoData - в «0» в каждом случае, кроме дорог, где вы решили установить значение «0,5».Затем вы можете сложить все свои растры в один большой стек и предсказать маршруты миграции.

Хорошо, это упрощенный пример, но, возможно, вы поймете, почему нам ДАЖЕ больше информации о том, что вы хотите сделать.

1 голос
/ 16 декабря 2011

Шейп-файлы или файл osm xml - это просто контейнеры, которые содержат геометрические фигуры. Существует множество программных библиотек, которые позволяют вам читать эти файлы и извлекать данные. Я бы рекомендовал посмотреть GDAL / OGR в качестве отправной точки.

Метод, подобный getMapData (долгота, широта) , по сути, является функцией поиска / запроса. Вам также нужно быть немного более конкретным, хотите ли вы, чтобы геометрии содержали точку, находились на расстоянии некоторой точки и т. Д.?

Вы можете найти данные карты, используя алгоритм грубой силы

for shape in shapefile:
    if shape.contains(query_point):
        return shape

Или вы можете использовать более продвинутые алгоритмы / структуры данных, такие как RTrees, KDTrees, QuadTrees и т. Д. Самый простой способ начать работу с запросом данных карты - загрузить их в пространственную базу данных. Я бы рекомендовал изучить PostgreSQL + PostGIS и SpatiaLite

0 голосов
/ 21 декабря 2011

Вы также можете посмотреть на Spatialite и / или PostGIS , которые представляют собой две пространственно-разрешенные базы данных, которые можно использовать отдельно или в сочетании с GDAL / OGR.

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

...