2009-10-21 74 views
0

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

回答

1

你可以从一个Postgres数据库使用文本转换功能空间数据的文本表示,像

SELECT AsText(MyGemoetry) from MyTable 

那么你解析字符串,创建使用各种AP​​I函数的对象 - 取决于PostGIS的几何类型 - 并将这些对象以类似的方式附加到DOM中的主要插件对象。

如果您熟悉JavaScript和XML有一个基本的知识,良好的开端是http://code.google.com/apis/earth/documentation/reference/

不要忘记指定唯一的ID对你的对象,所以你可以找到他们后来放弃/修改。

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

您也可以咨询sample applications并使用code playground为“快速成型”

重新“实时”至少需要,你可以将自己的代/重绘例程事件。

好运 拾音

+0

从我的经验来看,tcarobruce的解决方案效果更好。尝试手动解析文本在已有函数执行时会过度杀伤。 – Adam 2010-07-08 20:09:22

+0

@Adam:我倾向于同意你的看法,除了我只想从一个Geo格式获取小块信息并创建另一个信息外。通常Geoformats超载我不需要的东西(....只是给我LAT/LON ;-)。这说,诚然,我没有探索ST_AsKML()到目前为止。 – MikeD 2010-07-09 16:27:59

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是一个很大的开端!)