【问题标题】:dynamic map managment in google earth谷歌地球中的动态地图管理
【发布时间】:2009-10-21 03:48:15
【问题描述】:

我的目标是通过使用动态输入 Postgis 数据库的数据在谷歌地图上显示各种形状(多边形、点、线串)(我的意思是我们可以实时看到地图中的修改)。 我正在寻找一种方法来做到这一点,它使用 postgis 中已经提供的空间结构(已经指定形状是线串还是多边形等),而不是解析坐标然后在谷歌地图中重新输入空间结构。我看到 google maps api 现在与 kml 数据格式兼容。然后我读到我必须将 postgis 数据转换为 kml 格式。 我在论坛上阅读了一些关于通过 FWTools 将 postgis 数据转换为 kml 的实际过程,但没有看到任何对我有帮助的东西。我是 kml 新手,但熟悉 postgis 和 perl 和 PHP。是否有关于将 postgis 数据转换为 kml 的过程的教程?我可以从哪里开始?感谢您的帮助

【问题讨论】:

    标签: maps gis kml postgis google-earth


    【解决方案1】:

    您可以使用 PostGIS 直接转换为 KML:

    SELECT ST_AsKML(geometry) from MyTable;
    

    ST_AsKML 是几种输出格式之一,包括 WKT、GML、GeoJSON 等。

    要在 Google 地球中显示动态数据,一种常见的模式是使用带有 NetworkLink 元素的 KML。让链接的viewRefreshMode 等于onStop,Google 地球将发出请求(可能是向 PHP 提供的 URL)附加边界框参数。使用边界框查询 PostGIS 数据库中的要素,并以 kml 形式返回结果。如果您有很多功能,但只想检索用户正在查看的区域中的功能,这非常好。

    根据您的应用程序的复杂性,您可能还想查看GeoDjango。 (熟悉 PostGIS 是一个很大的开端!)

    【讨论】:

      【解决方案2】:

      您可以使用文本转换函数从 Postgres DB 中获取空间数据的文本表示,例如

      SELECT AsText(MyGemoetry) from MyTable
      

      然后您解析字符串,使用各种 API 函数创建对象 - 取决于 PostGIS 几何类型 - 并以类似 DOM 的方式将这些对象附加到主 GE 插件对象。

      如果您熟悉 JavaScript 并且对 XML 有基本的了解,一个好的开始是http://code.google.com/apis/earth/documentation/reference/

      不要忘记为您的对象指定唯一 ID,以便您以后可以找到它们以删除/修改。

      也许你可以得到一些灵感here,显示链接的“locator.js”文件并查看函数 PaintSubField(Coord) ...这是另一种方式,有点粗略但有效,避免弄乱太多单个父/子对象和结构

      您还可以咨询sample applications 并使用code playground 进行“快速原型设计”

      要“实时”,您至少需要一个可以将生成/重绘例程链接到的事件。

      祝你好运 迈克D

      【讨论】:

      • 根据我的经验,tcarobruce 的解决方案效果更好。当已经有一个函数可以手动解析文本时,尝试手动解析文本是矫枉过正的。
      • @Adam:我倾向于同意你的观点,除了我只想从一种地理格式中获取一小部分信息并创建另一种的情况。通常,Geoformats 中充斥着我不需要的东西(....只要给我那个 LAT/LON ;-)。这就是说,我承认到目前为止我还没有探索 ST_AsKML()。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2013-11-16
      相关资源
      最近更新 更多