2

我有一个形状文件,我想通过使用传单 (http://leaflet.cloudmade.com/) 在网络上显示它。由于传单只支持geoJSON,我应该将shp文件更改为geoJSON。这很容易,因为我可以在 Quantum-GIS 中使用“另存为”功能。

虽然我可以使用 geojson 作为数据库(通过以编程方式读取、编辑和写入文件),但我认为使用“真实”数据库会更好。MySQL 是最流行的一种,它支持空间数据,所以我决定使用 MySQL。

场景是:

  1. 将 shp 更改为 MySQL(我使用 ogr2ogr,只需运行以下命令:ogr2ogr -f "MySQL" MySQL:"geo,user=root,host=localhost,password=toor" -lco engine=MYISAM airports.shp
  2. 将 MySQL 数据库提取到 geojson <--这是问题所在
  3. 使用 ajax 获取 geojson 并更改布局 <- 这应该很容易,我对 JQuery 很好

My MySQL 表中有一个列,其类型为“GEOMETRY”,请看下面的表定义:

CREATE TABLE IF NOT EXISTS `airports` (
  `OGR_FID` int(11) NOT NULL AUTO_INCREMENT,
  `SHAPE` geometry NOT NULL,
  `cat` decimal(10,0) DEFAULT NULL,
  `na3` varchar(80) DEFAULT NULL,
  `elev` double(32,3) DEFAULT NULL,
  `f_code` varchar(80) DEFAULT NULL,
  `iko` varchar(80) DEFAULT NULL,
  `name` varchar(80) DEFAULT NULL,
  `use` varchar(80) DEFAULT NULL,
  UNIQUE KEY `OGR_FID` (`OGR_FID`),
  SPATIAL KEY `SHAPE` (`SHAPE`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=77 ;

有什么办法可以将这样的表格更改为 geojson 格式?(我更喜欢简单的方法,但如果没有,只需将列更改为数组即可)

编辑: 我使用 phayes 编写的 geophp。 https://github.com/phayes/geoPHP/wiki/Example-format-converter。这解决了主要问题。只需要在添加功能等方面有点混乱。有更简单的解决方案吗?

4

1 回答 1

3

虽然可能没有从 mysql 空间实体转换为 geojson 的直接方法,但您可以尝试以下方法:

  • 获取实体的 WKT(众所周知的文本)。( MySQL 参考)
  • 从 WKT 转换为 geojson(在 perl 中完成,尽管您应该能够用其他语言找到它或用 javascript 编写自己的语言);

请注意,正如其他人所建议的那样,仅在实体上调用 jsonEncode() 不会产生 geoJson。

我个人的建议(不能直接回答您的问题)是以您需要检索的格式存储数据。这将减少每次需要时处理数据所需的开销。

最简单的方法是按照您的建议将 geojson 存储为纯文本。如果出于某种原因,您还需要以本机格式存储的几何图形,则可以将其存储在另一列中。唯一的缺点是保持两列同步。

于 2012-06-15T03:40:00.957 回答