Jag visade i ett tidigare inlägg hur man kan skapa ett enkelt webgränssnitt för att läsa och uppdatera data i en geodatabas (länk).
I denna artikel går jag igenom hur man kan skapa sidor som även lägger till information i geodatabasen från värden i ett formulär. Allt kretsar kring texten i rubriken här ovan.
Jag skapade i samband med förra artikeln en sida där det gick att söka på nyckelord i en databas och visa de bilder som har dessa nyckelord kopplade till sig.
Jag använde då kommandot ”AsText(the_geom) AS geom” i min SQL sats för att hämta geometrin i kolumnen ”the_geom” i min PostGis databas. Nu är det dags att göra tvärt om.
Jag skapar ett formulär med fälten time, east, north, riktning, cmt, bild_s och bild.
I php tilldelas värdena från dessa fält variabler med motsvarande namn (ex): $cmt = $_POST[’cmt’];
Min SQL sats visas på raderna nedan, och det vi skall titta lite närmare på är en av variablerna.
INSERT INTO fotografier (the_geom, time, riktning, cmt, bild_s, bild) VALUES (GeomFromText(’POINT($east $north)’,3006), ’$time’, $riktning, ’$cmt’, ’$bild_s’, ’$bild’)
GeomFromText omvandlar geometri i textform till geometri i databasen. Jag använder mig av punkter, men det finns motsvarande kommandon för linjer och ytor också.
GeomFromText består av två delar, dels punktens koordinat (eller koordinater för linjer och ytor) och CRS för det koordinatsystem man använder, i mitt fall SWEREF99TM – 3006.
Koordinaterna är uppsättningar om två flyttal med decimalpunkt vid behov och ett ”space” tecken emellan, om det är linjer eller ytor så är det flera uppsättningar av koordinater och de är då separerade med komma.
Om allt stämmer så kommer SQL kommandot att skapa en ny rad i databasen och lägga till de data som du fyllt i formuläret.
Vill du titta på mina fotosidor så surfa in på denna länk, visa sedan resultatet i exempelvis Google Earth genom att ladda ner denna KMZ fil.
Om du vill ladda upp bilder i formuläret så var snäll och säkerställ att allt ifyllt är korrekt, eftersom jag inte har fixat någon felkontroll ännu.
Hej!
Först vill jag bara säga du har skapat en väldigt bra och trevlig hemsida med mycket nyttigt för dem som är intresserade av GIS och teknik.
Jag håller på att skapa en webbkarta i Open source för mina barn där jag vill att de kan se vart vi har rest i hela världen och där de skall lära sig geografi. Det hade då varit roligt och nyttigt för dem att även få med foton från våra resor så att de har något att associera resorna med.
Jag vill precis så som du har gjort, skapa en hemsida där vi kan fylla i ett formulär som är kopplat till min postgis-databas och geoserver och lägga in data med foto däri.
Kan du tipsa om hur postgis-databasen och tabellen däri skall vara konfigurerad för att kunna ta emot latitude och longitude samt hur PHP-scriptet också skall se ut?
här är mitt PHP testscript:
Datum:
Longitude:
Latitude:
Kommentar:
Bild:
Hoppas på hjälp!
Hälsningar
Raz
Hej Raz!
Kul att du gillar sidan.
Det är en intressant idé du har, och det borde inte vara några problem att ordna.
Jag brukar skapa mina PostGIS tabeller i QGIS och exportera dessa till PostGIS. Men det går att göra på flera sätt.
När man väl har en tabell man är nöjd med och som fungerar i exempelvis QGIS (eller Geoserver) så är det ganska enkelt att fixa ett webformulär som uppdaterar tabellen.
Nedan ser du de centrala delarna av php skriptet från min sida fotoadd.php. Detta är ett formulär som anropar sig självt och vid behov uppdaterar databasen med ett SQL kommando. Du kan anpassa skriptet till dina egna behov ganska enkelt. Exempelvis använder jag koordinater i SWEREF99TM, men om du vill använda lat/long i WGS-84 så byter du 3006 mot 4326 och skriver in decimala grader i Easting och Northing fälten.
<!– Formulär för att fylla i data för ny bild. Pekar på detta dokument –>
<form action=”fotoadd.php” method=”post”>
Datum: <input type=”text” name=”time”><small>ex: 2011-08-08 18:49</small><br>
SWEREF 99 TM:<br>
Öst/East: <input type=”text” name=”east”>
Nord/North: <input type=”text” name=”north”><br>
Riktning: <input type=”text” name=”riktning”><small>ex: 141</small><br>
Kommentar: <textarea name=’cmt’ cols=40 rows=5></textarea><br>
Bild URL liten: <input type=”text” name=”bild_s”><small>ca 256 pixel bred</small><br>
Bild URL stor: <input type=”text” name=”bild”><small>ca 1024 pixel bred</small><br>
Är du säker på att du fyllt i allt korrekt!!!<br>
<input type=”submit”>
</form>
<!– PHP kod för SQL –>
<?php
$dbh = pg_connect(”host=192.168.0.111 port=5432 dbname=testdb user=postgres”);
if (!$dbh) {
die(”Error in connection: ” . pg_last_error());
}
// Hämta Post och kontroller, därefter uppdatera data
$time = $_POST[’time’]; // Hämta datum.
$east = $_POST[’east’]; // Hämta datum.
$north = $_POST[’north’]; // Hämta datum.
$riktning = $_POST[’riktning’]; // Hämta datum.
$cmt = $_POST[’cmt’]; // Hämta datum.
$bild_s = $_POST[’bild_s’]; // Hämta datum.
$bild = $_POST[’bild’]; // Hämta datum.
// Felsökning
// echo ”<small>$time<br>$east<br>$north<br>$riktning<br>$cmt<br>$bild_s<br>$bild</small>”;
if ($east) {
$sqle = ”INSERT INTO fotografier (the_geom, time, riktning, cmt, bild_s, bild) VALUES (GeomFromText(’POINT($east $north)’,3006), ’$time’, $riktning, ’$cmt’, ’$bild_s’, ’$bild’)”;
// echo ”<br><small>$sqle</small><br><br>”;
$result = pg_query($dbh, $sqle);
if (!$result) {
die(”Error in SQL query: ” . pg_last_error());
}
}
// execute query
// free memory
pg_free_result($result);
// close connection
pg_close($dbh);
?>
Lycka till
/Klas