我的目标是通过使用动态输入 Postgis 数据库的数据在谷歌地图上显示各种形状(多边形、点、线串)(我的意思是我们可以实时看到地图中的修改)。我正在寻找一种方法来做到这一点,它使用 postgis 中已经提供的空间结构(已经指定形状是线串还是多边形等),而不是解析坐标然后在谷歌地图中重新输入空间结构。我看到 google maps api 现在兼容 kml 数据格式。然后我读到我必须将 postgis 数据转换为 kml 格式。我在论坛上阅读了一些关于通过 FWTools 将 postgis 数据转换为 kml 的实际过程,但没有看到任何对我有帮助的东西。我是 kml 新手,但熟悉 postgis 和 perl 和 PHP。是否有关于将 postgis 数据转换为 kml 的过程的教程?我可以从哪里开始?谢谢你的帮助
2 回答
您可以使用 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 是一个很大的开端!)
您可以使用文本转换函数从 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) ...这是另一种方式,有点粗略但有效,避免弄乱太多单独的父/子对象和结构
您可能还想查阅示例应用程序并使用代码游乐场进行“快速原型设计”
重新“实时”,您至少需要一个可以将生成/重绘例程链接到的事件。
祝你好运