Kun*_*nal 6 php geolocation shapefile
我正在尝试根据Zillow自由发布的Shapefile数据确定某个位置的邻域.
我对Shapefile格式一无所知,并且在线查找教程时遇到了一些麻烦 - 但我基本上想要获取纬度/经度对,并针对Shapefile数据运行它以确定相应的邻域.
谁能指出我正确的方向?甚至不确定从哪里开始.
这是我抓住Shapefile文件的地方:http://www.zillow.com/howto/api/neighborhood-boundaries.htm
这是使用PostGIS的一个例子,postgresql的空间扩展.类似的扩展存在于mysql,oracle,mssql,sqlite,毫无疑问是其他数据库. 必须安装PostGIS才能使其正常工作.
首先,您必须将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]
Run Code Online (Sandbox Code Playgroud)
然后在数据库上运行sql(在本例中为数据库"gis"),将sql文件转换为空间启用的表:
fmark@fmark-laptop:~$ psql -d gis -f Desktop/zillow/ZillowNeighborhoods-AK.sql
SET
BEGIN
...
COMMIT
Run Code Online (Sandbox Code Playgroud)
此时,您可能想要创建空间索引,因为您将要执行空间查询:
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
Run Code Online (Sandbox Code Playgroud)
现在,如果你有一个纬度/经度(在这个例子中-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:~$
Run Code Online (Sandbox Code Playgroud)
最后一个阶段显然可以通过简单的查询从PHP完成.
如果您尚未收到有关此主题的答案,则您建议的方法不是最有效的机制。我将尝试阐明如何以更有效的方式做到这一点。
首先将 shapefile 导入 GeoSpatial 数据库/数据存储区。
仍然可以使用纬度/经度比较模式,但这只会给您带来更多工作。地理空间数据库/数据存储提供比较几何形状(点、线、多边形)的功能。所有几何类型都存储在单个几何列中,而不是使用纬度和经度。然后,这些功能允许您比较距离、大小、重叠、交叉点和其他比较。
shapefile如何翻译?
shapefile 是表格数据的集合,包括邻域名称和附加字段,以及将这些记录映射到空间表示位置的方法。它是一组文件中的地理空间数据库。我想到的比较是使用 Access 作为数据库与传统服务器数据库的人。有可用的工具集/库可将 shapefile 转换为地理空间数据库。您可以通过搜索 GDAL 找到更多信息。
希望这对您有所帮助。
| 归档时间: |
|
| 查看次数: |
3140 次 |
| 最近记录: |