Alcuni anni fa, Zillow pubblicò i suoi file di confine di quartiere per gli Stati Uniti tramite la licenza 3.0 Creative Commons Sharealike. È una grande risorsa. Se sei interessato a mappe per altri paesi, consulta OpenStreetMaps.
Tuttavia, se non hai utilizzato gli shapefile geografici prima, può essere un po 'di confusione su come integrare i dati della mappa di Zillow nella tua applicazione.
Ho creato un'applicazione demo gratuita, open source, MapApp, per dimostrare come utilizzare i confini del quartiere di Zillow e integrarli con Google Maps, geolocalizzazione e geocodifica.
MapApp è costruito utilizzando il framework Yii e può essere eseguito su qualsiasi server MySQL e PHP. MapApp sfrutta anche l'API di Google Maps, l'helper di geolocalizzazione HTML5 da estebanav, eGeocoder e egMap (le ultime due sono estensioni Yii).
Per iniziare, puoi trovare il codice MapApp su GitHub. Seguire i passaggi di installazione che sono stati testati per Ubuntu 14.04 a Digital Ocean, ma dovrebbe funzionare con qualsiasi versione di LAMP.
Puoi clonare il repository o scaricare una copia. Configurare il sito Apache (come descritto nei passaggi di installazione) e riavviare Apache.
Il processo richiede circa 45 a 60 minuti. C'è molto da configurare: configurazione del server, DNS, decompressione del codice, configurazione del server Apache, del database MySQL, installazione del file di configurazione, esecuzione della migrazione dei record attivi, installazione delle librerie di mapping, download, importazione e regolazione dello Zillow dati.
Se desideri risparmiare tempo, offro un'immagine preconfigurata di MapApp per Digital Ocean. Tuttavia, imparerai di più se segui tutti i passaggi da solo.
Una volta creato il database MySQL per MapApp, è ora di ottenere i dati di Zillow.
Installa le librerie di astrazione dei dati geospaziali e scompatta:
sudo apt-get install gdal-bin sudo apt-get install decomprime
Creare una directory per memorizzare temporaneamente i dati di Zillow e copiare gli script di download.
mkdir ~ / zillow cp /var/www/mapapp/docs/wget-zillow.txt ~ / zillow / wget-zillow
Personalizza il file batch per scaricare i file per gli stati che desideri (ad esempio, California, Oregon, Washington o tutti). Quindi, esegui lo script di download. Questo scaricherà tutti i file zip desiderati da Zillow:
bash wget-zillow
Quindi, prepara gli script di importazione di MySQL:
cp /var/www/mapapp/docs/import-zillow.txt ~ / zillow / import-zillow copy /docs/import-zillow.txt in ~ / zillow / import-zillow
Personalizza l'elenco di stati nello script di cui vuoi importare i file di forma in MySQL. Sarà inoltre necessario personalizzare il nome del database, le credenziali e il nome della tabella di vicinato nel file locale ed eseguire lo script. Questo userà lo strumento ogr2ogr per importare i file shape (.shp) in MySQL:
bash import-zillow
Dovrai personalizzare il file /docs/config-mapapp.ini con le tue impostazioni, in particolare le impostazioni di accesso MySQL:
mkdir / var / www / secure cd / var / www / secure #note: i nomi sono invertiti di seguito da github al server cp /var/www/mapapp/docs/mapapp-config.ini / var / www / secure / config- mapapp.ini sudo nano config-mapapp.ini
Quindi, eseguire la migrazione del database record attivo per inizializzare MapApp. Le migrazioni dei database fanno parte di Yii Framework e servono a creare tabelle e schemi in modo programmatico:
cd / var / www / mapapp ./app/protected/yiic migrano verso l'alto
Quando richiesto, inserire un nome utente, e-mail e password per il proprio account amministratore. Questo è quello che utilizzerai per accedere alla pagina principale di MapApp.
Infine, dovrai eseguire uno script per invertire le coordinate geografiche nella tabella MySQL dei quartieri di Zillow. Visita http://yourdomain.com/neighborhoods/reverse. A seconda del numero di file di stato Zillow importati, potrebbero essere necessari alcuni minuti. Ho scoperto che l'ogr importa i dati di latitudine e longitudine di Zillow in un ordine di coordinate opposto rispetto a quello richiesto da Google Maps.
Visita la tua home page su http://mapapp.yourdomain.com. Accedi con il nome utente e la password che hai creato durante la migrazione del database.
Sfoglia i quartieri importati e fai clic su quelli che desideri visualizzare. Il prossimo collegamento di quartiere rende facile vederne più di uno. Puoi anche cercare per nome del quartiere, città, stato o contea
Sto usando l'estensione Yii egMap per visualizzare Google Maps usando i dati del poligono del quartiere di Zillow. Tuttavia, qualsiasi libreria PHP per Google Maps o JavaScript funzionerà altrettanto bene.
Il prepareMap
la funzione nel modello di vicinato richiede i dati poligono di Zillow dal database e il punto centrale del quartiere (chiamato centroide). Usiamo il centroide per posizionare il viewport della mappa.
funzione pubblica prepareMap ($ id) $ pg = Yii :: app () -> db-> createCommand () -> seleziona ('AsText (SHAPE) come regione, ASTEXT (Centroid (SHAPE)) come centro') -> da (Yii :: app () -> getDb () -> tablePrefix.'neighborhoods ') -> dove (' OGR_FID =: ogr_fid ', array (': ogr_fid '=> $ id)) -> queryRow (); Yii :: import ( 'ext.gmap *.'); $ gMap = new EGMap (); $ GMap-> setJsName ( 'map_region'); $ gMap-> width = '500'; $ gMap-> height = '500'; $ gMappa-> zoom = 13; $ center = new stdClass; lista ($ center-> lat, $ center-> lon) = $ this-> string_to_lat_lon ($ pg ['center']); $ gMap-> setCenter ($ center-> lat, $ center-> lon); $ coords = $ this-> string_to_coords ($ pg ['region']); $ polygon = new EGMapPolygon ($ coords); $ GMap-> addPolygon ($ poligono); restituire $ gMap;
L'azione di visualizzazione del controller Quartieri rende la pagina con la mappa:
funzione pubblica actionView ($ id) $ gMap = Neighborhoods :: model () -> prepareMap ($ id); $ this-> render ('view', array ('model' => $ this-> loadModel ($ id), 'gMap' => $ gMap,));
Fai clic su Geolocalizzazione nella barra di navigazione per localizzare il tuo quartiere dal tuo indirizzo WiFi. Questo non funzionerà via cellulare.
Probabilmente dovrai concedere l'autorizzazione al tuo browser per la geolocalizzazione per far funzionare questa funzione (cerca un popup sotto la barra degli indirizzi).
Quindi, sarai in grado di fare clic sull'opzione Cerca automaticamente la tua posizione:
A volte è necessario aggiornare per ottenere la risposta corretta dopo aver concesso l'autorizzazione - o da determinate posizioni WiFi. Stiamo utilizzando lo script di localizzazione di estebanav per supportare la geolocalizzazione HTML5 con il supporto browser più ampio possibile.
Una volta trovata la tua posizione, mostreremo la tua posizione su una mappa con il tuo quartiere di Zillow così come le informazioni di geocodifica cercate indipendentemente.
Usiamo l'estensione Yii eGeocoding per cercare ulteriori dati sulla tua posizione. Questo è principalmente per mostrare ulteriori fonti di dati che è possibile utilizzare oltre i dati di confine di Zillow.
funzione pubblica actionIndex () $ model = new Geolocation (); if (isset ($ _ POST ['Geolocation'])) $ info = Yii :: app () -> geocoder-> reverse ($ _ POST ['Geolocalizzazione'] ['lat'], $ _ POST ['Geolocalizzazione'] [ 'lon']); $ gps_for_sql = "Punto (". $ _ POST ['Geolocation'] ['lat']. "". $ _ POST ['Geolocation'] ['lon']. ")"; $ neighborhood = Neighborhoods :: model () -> lookupFromLatLon ($ gps_for_sql); $ gMap = Neighborhoods :: model () -> prepareMap ($ neighborhood ['OGR_FID']); $ marker = new EGMapMarkerWithLabel ($ _ POST ['Geolocation'] ['lat'], $ _ POST ['Geolocation'] ['lon'], array ('title' => 'Sei qui!')); $ GMap-> addMarker ($ marcatore); $ gMap-> width = '400'; $ gMap-> height = '400'; $ this-> render ('view', array ('data' => $ neighborhood, 'info' => $ info, 'gMap' => $ gMap)); else $ this-> render ('index', array ('model' => $ model));
Se vuoi vedere di più, tra cui disegnare le tue mappe regionali, prova il mio progetto parallelo, Geogram. Ti consente di creare community basate su email attorno a quartieri, regioni create dall'utente, luoghi e la directory di Google Places.
Geogram ha un numero di funzioni estese di mappatura ed e-mail. Se sei interessato a un'esercitazione sull'uso dell'API di posta elettronica di Mailgun da parte di Geogram, leggi Come Geogram ha creato un servizio di posta elettronica di gruppo gratuito utilizzando Yii per PHP con MySQL. Potrei scrivere un tutorial su come disegnare regioni per Google Maps in futuro - pubblica un commento qui sotto se vuoi leggerlo. Potresti anche essere interessato ad alcuni dei miei altri tutorial basati su Yii. Scriverò presto un'introduzione su Yii Framework per Tuts +.
Non esitate a postare correzioni, domande o commenti qui sotto. Puoi anche raggiungermi su Twitter @reifman o mandarmi un'email direttamente.