0

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

4

2 回答 2

4

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

SELECT ST_AsKML(geometry) from MyTable;

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

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

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

于 2009-10-22T18:37:50.197 回答
1

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

SELECT AsText(MyGemoetry) from MyTable

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

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

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

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

您可能还想查阅示例应用程序并使用代码游乐场进行“快速原型设计”

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

祝你好运

于 2009-10-22T16:21:11.127 回答