Menu
  • Hem
  • Dokument
  • Om Mig
Geosupportsystem

PHP och PostGIS

Posted on 2014-02-06

I går så handlade det om att ladda upp bilder till en server och visa var de var tagna på en karta genom att läsa EXIF informationen i bilderna. Nu hade jag tänkt gå vidare med att även skriva denna information till en PostGIS databas och därmed göra den tillgänglig för exempelvis QGIS.

Med utgångspunkt i förra php dokumentet görs nedanstående tillägg:

// Lägg till en punkt i databasen
if ($lat!=0) {   // Förklaring 1     
 $sql = "INSERT INTO foton (geom, namn, longitude, latitude, link) VALUES (ST_GeomFromText('POINT($lon $lat)',4326), '$uppladdad', $lon, $lat, '$newfile')"; // Förklaring 2
 $databas = pg_connect("host='192.168.0.25' port='5432' dbname='geodata' user='user' password='password'"); // Förklaring 3
 if (!$databas) { // Förklaring 5
   die("Fel i databasanslutning: " . pg_last_error());
 } 
 $resultat = pg_query($databas, $sql); // Förklaring 4
 if (!$resultat) { // Förklaring 5
   die("Fel i SQL-frågan: " . pg_last_error());
 }
 pg_free_result($resultat); // Förklaring 6
 pg_close($databas); // Förklaring 6
} // Förklaring 1

Det var det hela…

Nåja, det krävs nog både en och annan förklaring.

  1. Först så testar man om det finns ett värde i $lat. Det är ju onödigt att spara data till databasen som har en felaktig position, det vill säga bilder utan GPS-data.
  2. SQL raden innehåller kommandot för att lägga till en rad i tabellen ”foton”. I första parentesen listas de kolumner i tabellen man vill skriva till. Lägg märke till kolumnen som heter ”geom”. Denna skapas automatiskt när man skapar en ny PostGIS tabell i QGIS. Kontrollera i PgAdminIII vad den heter i ditt fall. Den andra parentesen, efter VALUES, innehåller de värden som skall skrivas till kolumnerna. Dessa skall komma i samma ordning som i den förra parentesen. För att göra om lat/long värdena till geometri så används funktionen ST_GeomFromText. I denna funktion så anges även att koordinaterna är i WGS84 (EPSG:4326). Tänk även på att kolumner av typen text skall vara omslutna av ’enkelfnuttar’, medan siffervärden inte skall det.
  3. PG_Connect, försöker koppla upp mot en databas och sparar resultatet i variabeln ”$resultat”. Alla parametrarna i anslutningssträngen måste anpassas till de rådande förutsättningarna. I bland kan det vara problem att ansluta med en del användare, men prova med användaren postgres om du har problem.
  4. Pg_Query, utför det sqlkommando som skapades tidigare.
  5. De båda ”if” satserna testar om något gått fel i kommandona och skriver i så fall ut ett felmeddelande.
  6. Avslutningsvis frigörs resultatet och databaskopplingen stängs.

Nu kan jag ladda upp en bild på en webbsida (ladda.htm):

Skärmbild från 2014-02-02 14:57:25

Om bilden har GPS information i EXIF-data så visas den på kartan:

Skärmbild från 2014-02-02 14:59:07

Men jag kan även öppna PostGIS lagret i QIGS och titta på data där:

Skärmbild från 2014-02-02 15:03:47

I bilden ovan så visar jag hur jag även skapat ett ”kommando” som öppnar webbläsaren och visar den bild som är uppladdad i varje punkt.

Om du lyckats ladda hem och få igång php-sidan från igår så lägger du till koden ovan på rad 141 (efter $popkod raderna men innanför ”else” satsens klammerparentes).

Tänk även på att du måste själv skapa en tabell med lämpliga kolumner i PostGIS, samt att sätta rättigheterna på den användare du vill använda i php-skriptet. Sedan måste du anpassa SQL-kommandot så att det passar din tabell.

Lämna ett svar Avbryt svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Translate with Google

GBR In English
GER Auf Deutch
FRA En Français
ESP En Español
Swedish is a hard language for a machine to translate. Nuance and detail will likely be lost.
     

Bok om QGIS på Svenska

Bok

Beställ Boken/E-bok genom att klicka på bilden (även förhandsgranskning).

Senaste kommentarer

  • klakar om Laga hål i höjddata
  • Per Ekström om Laga hål i höjddata
  • Sur om Mera verktyg i QGIS
  • Anton om ”Mobile *.Geodatabase”
  • Fredrik Ekberg om Ingen är oskyldig

Arkiv

Prenumerera på Geosupportsystem

Skriv in namn och epost för att prenumerera på meddelanden från denna blogg.
Loading

geosupport

TrueNAS bygge. @fractaldesignna Define R5 är rikt TrueNAS bygge. @fractaldesignna Define R5 är riktigt trevlig att bygga i, och den sväljer väldigt mycket disk. Här skall virtualiseras både PostGis, WebODM och Geonode så småningom.
Då har jag lite att bläddra i ett tag framöver. Då har jag lite att bläddra i ett tag framöver.
YouTube video to frames. Processed in OpenDroneMap YouTube video to frames. Processed in OpenDroneMap and visualized in QGIS 3.17.
Ladda mer...

Meta

  • Logga in
  • Flöde för inlägg
  • Flöde för kommentarer
  • WordPress.org
©2021 Geosupportsystem | WordPress Theme by Superbthemes.com