Đây là một ví dụ sử dụng PostGIS, các phần mở rộng không gian cho postgresql. Các phần mở rộng tương tự tồn tại cho mysql, oracle, mssql, sqlite và không nghi ngờ các cơ sở dữ liệu khác. PostGIS must be installed để làm việc này.
Trước tiên, bạn phải chuyển đổi các shapefile vào một tập tin sql:
[email protected]:~$ shp2pgsql -c Desktop/zillow/ZillowNeighborhoods-AK.shp zillowak > Desktop/zillow/ZillowNeighborhoods-AK.sql
Shapefile type: Polygon
Postgis type: MULTIPOLYGON[2]
Sau đó chạy sql trên cơ sở dữ liệu (cơ sở dữ liệu "GIS" trong trường hợp này) để chuyển đổi file sql vào một bảng không gian kích hoạt:
[email protected]:~$ psql -d gis -f Desktop/zillow/ZillowNeighborhoods-AK.sql
SET
BEGIN
...
COMMIT
Tại thời điểm này, bạn có thể muốn tạo ra một chỉ số không gian, như bạn sẽ được thực hiện một truy vấn không gian:
[email protected]:~$ 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
Bây giờ, nếu bạn có một lat/long (trong ví dụ này -149.309W, 60.985S), bạn có thể tìm thấy vùng lân cận nào: fmark @ fmark-laptop: ~ $ psql -d gis psql (8.4. 2) Nhập "trợ giúp" để được trợ giúp.
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
[email protected]:~$
Giai đoạn cuối cùng này rõ ràng có thể được thực hiện từ PHP bằng truy vấn đơn giản.
Câu trả lời hay. Làm thế nào bạn sẽ làm điều này trong hàng loạt? –