Я работаю над приложением Google Maps, которое делает следующее (при низком уровне масштабирования):
Печать на карте набора многоугольников. Эти многоугольники созданы из файлов KML, которые я создал с помощью Google Планета Земля. В основном эти многоугольники покрывают участки земли размером с континент. 15 из них покрывают всю землю мира.
Поверх каждого наложения многоугольника отображается число, которое представляет общее количество точек, существующих в этом многоугольнике.
Точки, которые я хочу отобразить на своей карте, имеют поле, представляющее страну, и поле для широты / долготы. Я получаю итоги, выполняя запрос для каждого многоугольника по коду страны, например:
east_europe_total = Point.objects.filter( Q(country_code='TR') | Q(country_code='CZ') ... ).count()
Что не очень хорошо, если я хочу, чтобы граница проходила через страну, или если я когда-нибудь захочу реорганизовать сектора своих полигонов. Гораздо лучшее решение - передать файл KML в базу данных (это PostGIS) и разобраться со всем этим для меня. Возможно ли это каким-либо образом? Если нет, то как насчет преобразования файла KML в формат, который может быть легко вставлен в Карты Google и доступен для запросов с помощью postGIS?
Ответ 1 · рейтинг 6 · Alex Martelli
Хотя он не полностью отвечает на ваш запрос, я нашел эта статья бесценна, как из-за ее удобочитаемого описания (операции, несколько отличной от той, которая вам нужна - и от того, что я пытался сделать в то время, - но все же требуя, чтобы PostGIS взаимодействовал с файлом KML). Как пишет автор статьи,
Как правило, существует много жаргона ГИС, который является академическим, математическим и сбивает с толку непосвященных (например, выпуклые корпуса), но если вы будете искать достаточно долго, вы в конечном итоге найдете то, что вам нужно!
... и читаемые статьи, подобные этой (с указателями на многие инструменты и c), - это начало.
Итак, чтобы подвести итог, сначала вам нужно найти приемлемый способ превратить ваш KML в формат, который PostGIS знает [или, в частности, ogr2ogr знает], например GML (и проверить это), а затем что-то вроде ogr2ogr позволяет загрузить этот формат в PostGIS - - и тогда, конечно, вам все еще нужны операции с точкой в многоугольнике, но, эй, это только начало.
Ответ 2 · boulder_ruby
Вы всегда можете проанализировать 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")