Запрос базы данных PostGIS с помощью шейп-файла KML

Я работаю над приложением Google Maps, которое делает следующее (при низком уровне масштабирования):

  1. Печать на карте набора многоугольников. Эти многоугольники созданы из файлов KML, которые я создал с помощью Google Планета Земля. В основном эти многоугольники покрывают участки земли размером с континент. 15 из них покрывают всю землю мира.

  2. Поверх каждого наложения многоугольника отображается число, которое представляет общее количество точек, существующих в этом многоугольнике.

Точки, которые я хочу отобразить на своей карте, имеют поле, представляющее страну, и поле для широты / долготы. Я получаю итоги, выполняя запрос для каждого многоугольника по коду страны, например:

east_europe_total = Point.objects.filter( Q(country_code='TR') | Q(country_code='CZ') ... ).count()

Что не очень хорошо, если я хочу, чтобы граница проходила через страну, или если я когда-нибудь захочу реорганизовать сектора своих полигонов. Гораздо лучшее решение - передать файл KML в базу данных (это PostGIS) и разобраться со всем этим для меня. Возможно ли это каким-либо образом? Если нет, то как насчет преобразования файла KML в формат, который может быть легко вставлен в Карты Google и доступен для запросов с помощью postGIS?


person priestc    schedule 06.07.2009    source источник


Ответы (2)


Хотя он не полностью отвечает на ваш запрос, я нашел эта статья бесценна, как из-за ее удобочитаемого описания (операции, несколько отличной от той, которая вам нужна - и от того, что я пытался сделать в то время, - но все же требуя, чтобы PostGIS взаимодействовал с файлом KML). Как пишет автор статьи,

Как правило, существует много жаргона ГИС, который является академическим, математическим и сбивает с толку непосвященных (например, выпуклые корпуса), но если вы будете искать достаточно долго, вы в конечном итоге найдете то, что вам нужно!

... и читаемые статьи, подобные этой (с указателями на многие инструменты и c), - это начало.

Итак, чтобы подвести итог, сначала вам нужно найти приемлемый способ превратить ваш KML в формат, который PostGIS знает [или, в частности, ogr2ogr знает], например GML (и проверить это), а затем что-то вроде ogr2ogr позволяет загрузить этот формат в PostGIS - - и тогда, конечно, вам все еще нужны операции с точкой в ​​многоугольнике, но, эй, это только начало.

person Alex Martelli    schedule 06.07.2009
comment
Ссылка не работает, может у вас есть еще одна ссылка на эту статью? - person diegueus9; 22.08.2012

Вы всегда можете проанализировать XML, получить координаты, а затем сгенерировать файл формы на основе этого массива координат. Могу помочь с первой частью, все равно на рубине ...

require 'nokogiri'
x  = Nokogiri::XML(File.open("fn.kml").read)
ary_of_coords = x.css("//coordinates").children.first.inner_text.gsub("\n", "").gsub("\t", "").split(",0")
person boulder_ruby    schedule 16.08.2013