Hoppa till innehåll
Meny
  • Hem
  • Dokument
  • Om Mig
Geosupportsystem

PHP och PostGIS

Publicerat den 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 *

     Mastodon  

Senaste kommentarer

  • Gustav G om Mäta kurvradier med GNSS
  • Sur om Varför är stiftpennor så långa?
  • QGIS 3.44 LTR – Geosupportsystem om Zorin på gammal laptop
  • Stefan Ene om Zorin på gammal laptop
  • Samira A om Om Mig

Arkiv

Meta

  • Logga in
  • Flöde för inlägg
  • Flöde för kommentarer
  • WordPress.org
©2026 Geosupportsystem | WordPress-tema av Superbthemes.com