使用KML“shapefile”查询PostGIS数据库

时间:2009-07-06 03:21:37

标签: django google-maps postgis

我正在使用Google地图应用程序,该应用程序执行以下操作(在低缩放级别):

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

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

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

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

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

2 个答案:

答案 0 :(得分:6)

虽然它没有完全回应你的要求,但我发现this article非常宝贵,因为它的可读叙述(操作与你需要的操作有些不同 - 和我试图的不同)当时也做 - 但仍然要求PostGIS与KML文件进行交互)。正如文章的作者所说,

  

一般来说,有很多GIS行话   这是相当学术的,数学的   对于没有经验的人而言,他们感到不安   (例如凸壳),但如果你保持   看起来足够长,你最终会   找到你需要的东西!

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

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

答案 1 :(得分: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")