2009-12-17 41 views
6

Tôi đang cố gắng xác định vùng lân cận cho một vị trí, dựa trên dữ liệu Shapefile được xuất bản tự do của Zillow. Tôi không thực sự biết gì về định dạng Shapefile, và đang gặp khó khăn khi tìm hướng dẫn trực tuyến - nhưng về cơ bản tôi muốn dùng các cặp vĩ độ/kinh độ và chạy nó dựa trên dữ liệu Shapefile để xác định vùng lân cận tương ứng (S).Sử dụng dữ liệu Shapefile để xác định vùng lân cận cho kinh độ/vĩ độ

Có ai có thể chỉ cho tôi đúng hướng không? Thậm chí không chắc chắn bắt đầu từ đâu.

Đây là nơi tôi đã nắm lấy các tập tin Shapefile: http://www.zillow.com/howto/api/neighborhood-boundaries.htm

Trả lời

3

Trong trường hợp bạn chưa nhận được một câu trả lời về chủ đề này, phương pháp mà bạn đang đề xuất không phải là cơ chế hiệu quả nhất. Tôi sẽ cố gắng phá vỡ ý tưởng về cách bạn có thể làm điều này một cách hiệu quả hơn.

Bắt đầu bằng cách nhập shapefile của bạn vào cơ sở dữ liệu/kho dữ liệu GeoSpatial.

Mẫu so sánh vĩ độ/kinh độ vẫn có thể được sử dụng, nhưng nó sẽ chỉ gây ra nhiều công việc hơn cho bạn. Cơ sở dữ liệu không gian địa lý/kho dữ liệu cung cấp các chức năng để so sánh hình học (điểm, đường, đa giác). Thay vì sử dụng vĩ độ và kinh độ, tất cả các loại hình được lưu trữ trong một cột hình học đơn. Các hàm sau đó cho phép bạn so sánh khoảng cách, kích thước, lớp phủ, giao lộ và các so sánh khác.

Dịch shapefile được dịch như thế nào?

Shapefile là tập hợp các dữ liệu dạng bảng, nghĩ tên vùng lân cận và các trường bổ sung cũng như cách ánh xạ các bản ghi đó đến vị trí được biểu diễn bằng không gian. Nó là một cơ sở dữ liệu không gian địa lý trong một nhóm các tập tin. So sánh mà nói đến cái tâm là một người sử dụng truy cập như một cơ sở dữ liệu so với một cơ sở dữ liệu máy chủ truyền thống. Có các bộ công cụ/thư viện sẵn có sẽ chuyển đổi một shapefile thành một cơ sở dữ liệu không gian địa lý. Bạn có thể tìm thêm thông tin bằng cách tìm kiếm GDAL.

Hy vọng điều này hữu ích.

9

Đâ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.

+0

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? –

Các vấn đề liên quan