使用Shapefile数据确定经度/纬度的邻域

时间:2009-12-17 01:43:18

标签: php geolocation shapefile

我正在尝试根据Zillow自由发布的Shapefile数据确定某个位置的邻域。

我对Shapefile格式一无所知,并且在线查找教程时遇到了一些麻烦 - 但我基本上想要获取纬度/经度对,并针对Shapefile数据运行它以确定相应的邻域(s) )。

有人能指出我正确的方向吗?甚至不确定从哪里开始。

这是我抓住Shapefile文件的地方:http://www.zillow.com/howto/api/neighborhood-boundaries.htm

2 个答案:

答案 0 :(得分:9)

这是一个使用PostGIS的例子,postgresql的空间扩展。类似的扩展存在mysql,oracle,mssql,sqlite,毫无疑问是其他数据库。 PostGIS must be installed为此工作。

首先,您必须将shapefile转换为sql文件:

fmark@fmark-laptop:~$ shp2pgsql -c Desktop/zillow/ZillowNeighborhoods-AK.shp zillowak > Desktop/zillow/ZillowNeighborhoods-AK.sql
Shapefile type: Polygon
Postgis type: MULTIPOLYGON[2]

然后在数据库上运行sql(本例中为数据库“gis”)将sql文件转换为空间启用表:

fmark@fmark-laptop:~$ psql -d gis -f Desktop/zillow/ZillowNeighborhoods-AK.sql
SET
BEGIN
...
COMMIT

此时您可能想要创建空间索引,因为您将要进行空间查询:

fmark@fmark-laptop:~$ psql -d gis
psql (8.4.2)
Type "help" for help.

gis=# CREATE INDEX idx_neighborhoods ON zillowak USING gist(the_geom);
CREATE INDEX
gis-# \q

现在,如果你有一个纬度/经度(在这个例子中是-149.309W,60.985S),你可以找到它所在的邻域: fmark @fmark-laptop:〜$ psql -d gis     psql(8.4.2)     输入“帮助”以获取帮助。

gis=# select gid, state, county, city, name, regionid from zillowak WHERE ST_CONTAINS(the_geom, GeomFromText('POINT(-149.309 60.985)', -1));
 gid | state |  county   |   city    |     name      | regionid 
-----+-------+-----------+-----------+---------------+----------
  29 | AK    | Anchorage | Anchorage | Turnagain Arm |   275783
(1 row)

gis=# \q
fmark@fmark-laptop:~$ 

最后一个阶段显然可以通过简单的查询从PHP完成。

答案 1 :(得分:3)

如果您尚未收到有关此主题的答案,那么您建议的方法不是最有效的机制。我将尝试突破你如何以更有效的方式做到这一点的想法。

首先将shapefile导入GeoSpatial数据库/数据存储区。

仍然可以使用lat / lon比较模式,但它只会为您带来更多的工作。地理空间数据库/数据存储区提供比较几何(点,线,多边形)的功能。所有几何类型都存储在单个几何列中,而不是使用纬度和经度。然后,这些功能可以比较距离,大小,叠加,交叉和其他比较。

shapefile是如何翻译的?

shapefile是表格数据的集合,可以考虑邻域名称和其他字段,以及将这些记录映射到空间表示位置的方法。它是一组文件中的地理空间数据库。想到的比较是使用访问作为数据库而不是传统服务器数据库的人。有一些工具集/库可以将shapefile转换为地理空间数据库。您可以通过搜索GDAL找到更多信息。

希望这有用。