For noen år siden utgitt Zillow sine grensegrensefiler for USA via Creative Commons Sharealike 3.0-lisens. Det er en stor ressurs. Hvis du er interessert i kart for andre land, sjekk ut OpenStreetMaps.
Men hvis du ikke har brukt geografiske shapefiles før, kan det være litt forvirrende å integrere Zillows kartdata i din egen applikasjon.
Jeg har bygget en gratis, åpen kildekode-demo-applikasjon, MapApp, for å demonstrere hvordan du bruker grensene i Zillow-området og integrere dem med Google Maps, geolokasjon og geokoding.
MapApp er bygget ved hjelp av Yii Framework og kan kjøres på hvilken som helst MySQL, PHP-kompatibel server. MapApp utnytter også Google Maps API, HTML5 Geolocation hjelper fra estebanav, eGeocoder og egMap (de to sistnevnte er Yii-utvidelser).
For å komme i gang kan du finne MapApp-koden på GitHub. Følg installasjonstrinnene som er testet for Ubuntu 14.04 på Digital Ocean, men skal fungere med en hvilken som helst versjon av LAMP.
Du kan enten klone depotet eller laste ned en kopi. Konfigurer Apache-siden (som beskrevet i installasjonstrinnene) og start Apache på nytt.
Prosessen tar ca 45 til 60 minutter. Det er mye å sette opp: Konfigurere serveren din, DNS-en, pakke ut koden, sette opp Apache-serveren, MySQL-databasen, installere konfigurasjonsfilen, kjøre den aktive postmigreringen, installere kartleggingsbibliotekene, last ned og importer og juster Zillow data.
Hvis du vil spare tid, tilbyr jeg et forhåndskonfigurert bilde av MapApp for Digital Ocean. Men du vil lære mer om du går gjennom alle trinnene selv.
Når du har opprettet MySQL-databasen for MapApp, er det på tide å få Zillow-dataene.
Installer Geospatial Data Abstraction Libraries og pakke ut:
sudo apt-get installer gdal-bin sudo apt-get installer unzip
Lag en katalog for midlertidig lagring av Zillow-dataene, og kopier nedlastingsskriptene.
mkdir ~ / zillow cp /var/www/mapapp/docs/wget-zillow.txt ~ / zillow / wget-zillow
Tilpass batchfilen for å laste ned filene for de statene du vil ha (for eksempel California, Oregon, Washington eller alle). Kjør deretter nedlastingsskriptet. Dette vil laste ned alle ønskede zip-filer fra Zillow:
bash wget-zillow
Deretter skal du forberede MySQL-importskriptene:
cp /var/www/mapapp/docs/import-zillow.txt ~ / zillow / import-zillow kopi /docs/import-zillow.txt til ~ / zillow / import-zillow
Tilpass listen over stater i skriptet hvis formfiler du vil importere til MySQL. Du må også tilpasse databasens navn, legitimasjon og nabolagetabellnavn i din lokale fil og kjøre skriptet. Dette vil bruke verktyget ogr2ogr til å importere formene (.shp) til MySQL:
bash import-zillow
Du må tilpasse filen /docs/config-mapapp.ini med dine egne innstillinger, spesielt MySQL-tilgangsinnstillingene:
mkdir / var / www / sikker cd / var / www / secure #note: navnene er omvendt nedenfor fra github til serveren cp /var/www/mapapp/docs/mapapp-config.ini / var / www / secure / config- mapapp.ini sudo nano config-mapapp.ini
Deretter kjører du migrasjonen for aktiv rekorddatabase for å initialisere MapApp. Database migreringer er en del av Yii Framework, og tjener til å lage tabeller og skjema på en programmatisk måte:
cd / var / www / mapapp ./app/protected/yiic migrere opp
Når du blir bedt om det, skriv inn et brukernavn, e-post og passord for administratorkontoen din. Dette er det du vil bruke til å logge inn på MapApps hjemmeside.
Til slutt må du kjøre et skript for å reversere de geografiske koordinatene i Zillow-områdets MySQL-tabell. Besøk http://yourdomain.com/neighborhoods/reverse. Avhengig av antall Zillow-statfiler du importerte, kan dette ta noen minutter. Jeg har funnet ut at ogr importerer Zillow breddegrad og lengdegrad data i motsatt koordinat rekkefølge enn Google Maps krever.
Gå til hjemmesiden din på http://mapapp.yourdomain.com. Logg inn med brukernavnet og passordet du opprettet under databaseoverføringen.
Bla gjennom dine importerte nabolag og klikk på noen du vil vise. Den neste nabolaget koblingen gjør det enkelt å se mer enn en. Du kan også søke etter bynavn, by, stat eller fylke
Jeg bruker Yii-utvidelsen egMap for å vise Google Maps ved hjelp av Zillow-nabolagets polygondata. Imidlertid vil ethvert PHP-bibliotek for Google Maps eller JavaScript fungere like bra.
De prepareMap
funksjon i nabo-modellmodellen ber om Zillow-polygondataene fra databasen og midtpunktet i nabolaget (kalt en sentroid). Vi bruker sentroid til å plassere visningsporten til kartet.
offentlig funksjon prepareMap ($ id) $ pg = Yii :: app () -> db-> createCommand () -> velg ('AsText (SHAPE) som region, ASTEXT (Centroid (SHAPE)) som senter') -> fra (Yii :: app () -> getDb () -> tablePrefix.'neighborhoods ') -> hvor (' OGR_FID =: ogr_fid ', array (': ogr_fid '=> $ id)) -> queryRow (); Yii :: import ( 'ext.gmap *.'); $ gMap = ny EGMap (); $ GMap-> setJsName ( 'map_region'); $ gMap-> width = '500'; $ gMap-> height = '500'; $ gMap-> zoom = 13; $ center = new stdClass; liste ($ center-> lat, $ center-> lon) = $ this-> string_to_lat_lon ($ pg ['senter']); $ gMap-> setCenter ($ center-> lat, $ center-> lon); $ coords = $ this-> string_to_coords ($ pg ['region']); $ polygon = ny EGMapPolygon ($ koordiner); $ GMap-> addPolygon ($ polygon); returner $ gMap;
Nabolagets kontrollervisning handler gjør siden med kartet:
offentlig funksjon actionView ($ id) $ gMap = Nabolag :: modell () -> prepareMap ($ id); $ this-> render ('view', array ('model' => $ this-> loadModel ($ id), 'gMap' => $ gMap,));
Klikk på Geolocation i navigeringsfeltet for å finne ditt nabolag fra din WiFi-adresse. Dette vil ikke fungere via mobil.
Du vil sannsynligvis måtte gi tillatelse til nettleseren din for geolocation for denne funksjonen til å fungere (se etter en popup under adresselinjen).
Deretter kan du klikke automatisk på Oppsøk posisjonen din:
Noen ganger må du oppdatere for å få riktig svar etter at du har gitt tillatelse - eller fra bestemte Wi-Fi-steder. Vi bruker geoposjonsskriptet fra estebanav for å støtte HTML5 Geolocation med bredest mulig nettleserstøtte.
Når plasseringen din er funnet, viser vi din plassering på et kart med ditt Zillow-område, så vel som Geocoding-informasjonen så opp selvstendig.
Vi bruker Yii eGeocoding-utvidelsen for å slå opp flere data om posisjonen din. Dette er hovedsakelig å vise ytterligere datakilder du kan bruke utover Zillow-grensedataene.
offentlig funksjon actionIndex () $ model = ny Geolocation (); hvis (isset ($ _ POST ['Geolocation'])) $ info = Yii :: app () -> geocoder-> revers ($ _ POST ['Geolocation'] ['lat'], $ _ POST ['Geolocation'] [ 'lon']); $ gps_for_sql = "Punkt (". $ _ POST ['Geolocation'] ['lat']. "". $ _ POST ['Geolocation'] ['lon']. ")"; $ nabolaget = Nabolag :: modell () -> lookupFromLatLon ($ gps_for_sql); $ gMap = Nabolag :: modell () -> prepareMap ($ nabolag ['OGR_FID']); $ markør = ny EGMapMarkerWithLabel ($ _ POST ['Geolocation'] ['lat'], $ _ POST ['Geolocation'] ['lon'], array ('title' => 'Du er her!')); $ GMap-> addMarker ($ markør); $ gMap-> width = '400'; $ gMap-> height = '400'; $ this-> render ('view', array ('data' => $ nabolag, 'info' => $ info, 'gMap' => $ gMap)); else $ this-> render ('index', array ('model' => $ modell));
Hvis du vil se mer, inkludert å tegne egne regionskart, kan du prøve ut sideprosjektet, Geogram. Det lar deg lage e-postdrevne lokalsamfunn rundt nabolag, brukeropprettede regioner, steder og Google Places-katalogen.
Geogram har en rekke utvidede kartleggings- og e-postfunksjoner. Hvis du er interessert i en veiledning om Geograms bruk av Mailgun-epost-API, leser du hvordan Geogram bygget en gratis gruppe-e-posttjeneste ved hjelp av Yii for PHP med MySQL. Jeg kan skrive en veiledning om tegning av regioner for Google Maps i fremtiden - legg inn en kommentar nedenfor hvis du vil lese det. Du kan også være interessert i noen av mine andre Yii-baserte opplæringsprogrammer. Jeg skal skrive en Yii Framework introduksjon for Tuts + snart.
Ta gjerne inn korrigeringer, spørsmål eller kommentarer nedenfor. Du kan også nå meg på Twitter @ reifman eller email meg direkte.