Bir boylam / enlem mahalle belirlemek için Shapefile verileri kullanarak

2 Cevap php

Ben Zillow en özgürce yayınlanan Shapefile verilere dayalı bir yerde, için mahalle belirlemek için çalışıyorum.

Gerçekten Shapefile biçimi hakkında bir şey bilmiyorum, ve bazı sorun çevrimiçi öğreticiler bulma yaşıyorum - ama temelde enlem / boylam çiftlerini almak istiyorum, ve ilgili mahalle (ler) belirlemek için Shapefile veri karşı çalıştırın.

Herkes bana doğru yönde işaret edebilir? Nerede başlar bile emin değil.

Ben yakaladı ettik bu nerede Shapefile dosyaları: http://www.zillow.com/howto/api/neighborhood-boundaries.htm

2 Cevap

İşte postgresql için PostGIS, uzaysal uzantıları kullanarak bir örnek. Benzer uzantıları MySQL, Oracle, mssql, sqlite ve şüphesiz diğer veritabanları için var. PostGIS must be installed bu iş için.

Öncelikle, bir sql dosyasına shapefile dönüştürmek gerekir:

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

Sonra bir mekansal etkin tabloya sql dosyasını dönüştürmek için veritabanı (bu durumda veritabanı "CBS") üzerinde sql çalıştırın:

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

Bir mekansal sorgu yapıyor olacak gibi bu noktada muhtemelen, bir mekansal dizin oluşturmak istiyorsanız:

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

Now, if you have a lat/long (in this example -149.309W, 60.985S), you can find which neighborhood it is in: fmark@fmark-laptop:~$ psql -d gis psql (8.4.2) Type "help" for help.

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:~$ 

Bu son aşama tabii ki basit bir sorgu tarafından PHP yapılabilir.

Zaten bu konuyla ilgili bir cevap almadım durumda, size düşündüren hangi yöntem en etkili mekanizma değildir. Ben size daha etkili bir şekilde bunu nasıl fikir kırmaya çalışacağım.

Bir coğrafi veritabanı / datastore'una içine Shapefile ithal başlayın.

Karşılaştırma enlem / boylam desen hala kullanılabilir, ancak yalnızca sizin için daha çok çalışmasına neden oluyor. Geo mekansal veritabanları / DataStores geometriler (nokta, çizgi, poligon) karşılaştırmak işlevleri sağlar. Bunun yerine bir enlem ve boylam kullanarak, tüm geometri türleri tek bir geometri sütun içinde saklanır. Fonksiyonlar daha sonra mesafe, boyut, bindirme, kavşak ve diğer karşılaştırmalar karşılaştırmak için izin verir.

Nasıl shapefile çevirmek?

Bir shapefile tablo veri toplama, mahalle adı ve ek alanlar ve mekansal temsil yere bu kayıtları eşleştirmek için bir yol düşünüyorum. Bu dosyaların bir gruplandırma bir coğrafi veritabanı. Akla gelen karşılaştırma geleneksel bir sunucu veritabanına karşı bir veritabanı olarak erişimi kullanarak kişidir. Bir coğrafi veri tabanı için bir Şekil dönüştürmek olacaktır kullanılabilir toolsets / kütüphaneler vardır. Sen gdal arayarak daha fazla bilgi bulabilirsiniz.

Bu yararlı olmuştur umarım.