2

我正在开发一个谷歌地图应用程序,它执行以下操作(在低缩放级别):

  1. 在地图上打印一堆多边形叠加层。这些多边形是根据我使用 Google 地球创建的 KML 文件创建的。基本上,这些多边形覆盖了大陆大小的地球块。其中15个覆盖了整个世界。

  2. 在每个多边形叠加层的顶部,会显示一个数字,表示该多边形内存在的点总数。

我想在地图上显示的点有一个代表国家的字段和一个纬度/经度字段。我得到总数的方法是按国家代码对每个多边形运行查询,如下所示:

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

如果我想有一个跨越一个国家的边界​​,或者如果我想重新组织我的多边形“扇区”,这不是很好。一个更好的解决方案是将 KML 文件提供给数据库(即 PostGIS)并为我整理好。这有可能吗?如果不是,那么如何将 KML 文件转换为既可以轻松插入 Google 地图可以通过 postGIS 查询的格式?

4

2 回答 2

6

虽然它不能完全满足您的要求,但我发现这篇文章非常宝贵,因为它的可读性叙述(操作与您需要的操作有些不同 - 也与我当时尝试做的不同) -- 但仍需要 PostGIS 与 KML 文件进行交互)。正如文章作者所说,

一般来说,有很多 GIS 术语是相当学术、数学和令人不安的(例如凸包),但如果你继续寻找足够长的时间,你最终会找到你需要的东西!

...和像这样的可读文章(带有许多工具和c的指针)是一个开始。

因此,总而言之,首先您需要找到一种可接受的方法将您的 KML 转换为 PostGIS 知道的格式 [或者特别是 ogr2ogr 知道的格式],例如 GML(并验证),然后像ogr2ogr这样的东西可以让您将该格式加载到 PostGIS -- 然后当然你仍然需要多边形中的点操作,但是,嘿,这是一个开始。

于 2009-07-06T03:35:59.273 回答
0

您始终可以解析 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")
于 2013-08-16T02:07:37.813 回答