Automatisch genereren LAT LNG
Ik ben nog niet jaren ervaren in het gebied van SQL enz. en weet daarom niet zeker of wat ik wil, echt mogelijk is. Het zou mij echter heel veel werk schelen en daarom doe ik toch de vraag.
Ik heb een database waarin events bijgehouden worden. Hierin staat de plaatsnaam, de locatie (straat), begindatum, einddatum, latitude, longitude.
Nu moet ik voor ieder event alle waardes zelf invullen en middels een handige site als http://81nassau.com/demos/geocode/ de LAT en LNG berekenen.
Nu vraag ik mij af: is het mogelijk om deze LAT en LNG codes automatisch te laten genereren door de straat en woonplaats uit de database te halen? Dat is tenslotte alles wat je nodig hebt om de LAT en LNG te berekenen.
Ik kan hier uren op puzzelen of research doen op internet, maar kan niks vinden.
Alvast bedankt!
Misschien kan deze link je wel verder helpen
Ik denk dat dit wel is wat ik zoek inderdaad, echter vrees ik dat het nog even duurt voordat ik er wijs uit kom. Erg lastig allemaal hoe ik het in mijn codes moet verwerken.
Ga in ieder geval even mijn best doen!
bedankt
De makkelijkste manier volgens mij is de volgende.
Je stuurt de locatie door via een link:
bv: http://maps.google.com/maps/geo?q=1000+Brussel+Belgie&output=csv
Zoals je kan zien als je ernaar surft krijg je netjes de coördinaten van Brussel te zien.
q=het adres naarwaar je zoekt
output=soort "stijl" waarin je antwoord wilt krijgen van google maps.
Jou script zal dus moeten bestaan uit een formulier waarin je "q" definieerd (het adres). De spaties moeten vervangen worden door een plus-teken "+" en output stijl moet je erachter plakken.
http://maps.google.com/maps/geo?q= . $adres . &output=csv zal het ongeveer dan worden.
Veel succes nog!
Gewijzigd op 01/01/1970 01:00:00 door Dizzy
Ik wil jou of iemand anders niet met werk opzadelen, en ook zeker niet omdat ik het graag zelf wil uitvinden, maar ik krijg dit niet voor elkaar met de kennis die ik nu bezit helaas.
Op mijn site heb ik een google maps API waarin op de aangegeven locatie de marker op de maps geplaatst zal worden. Als je op de marker klikt krijg je nog wat gegevens te zien. Onderstaand het stukje code dat zorgt voor het plaatsen van de marker:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
GDownloadUrl("phpsqlajax_actueeloverzicht.php", function(data) {
var xml = GXml.parse(data);
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var plaats = markers[i].getAttribute("plaats");
var locatie = markers[i].getAttribute("locatie");
var datum_begin = markers[i].getAttribute("datum_begin");
var datum_eind = markers[i].getAttribute("datum_eind");
var type = markers[i].getAttribute("type");
var website = markers[i].getAttribute("website");
var Info = markers[i].getAttribute("Info");
var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var marker = createMarker(point, plaats, locatie, datum_begin, datum_eind, type, website, Info);
map.addOverlay(marker);
}
});
}
}
var xml = GXml.parse(data);
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var plaats = markers[i].getAttribute("plaats");
var locatie = markers[i].getAttribute("locatie");
var datum_begin = markers[i].getAttribute("datum_begin");
var datum_eind = markers[i].getAttribute("datum_eind");
var type = markers[i].getAttribute("type");
var website = markers[i].getAttribute("website");
var Info = markers[i].getAttribute("Info");
var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var marker = createMarker(point, plaats, locatie, datum_begin, datum_eind, type, website, Info);
map.addOverlay(marker);
}
});
}
}
Hij haalt hier de lat en Lng codes gewoon uit de database waar ik ze handmatig moet invoeren steeds. Wat heel veel werk zou schelen is dus als hij de Lat en LNG zelf zou kunnen maken en ik ze niet handmatig hoef in te voeren.
Je hebt hier zelf nog niet vaak mee gewerkt zei je net dus ik vrees dat je mij in dit deel misschien niet kan helpen, in dat geval dank ik je in ieder geval voor de hulp tot nu toe! Want ben wel weer wat wijzer en een stap dichter bij de oplossing.
Greetz
edit: hier misschien nog stukje code wat erbij hoort, uit de phpsqlajax_actueeloverzicht.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Start XML file, echo parent node
echo '<markers>';
// Iterate through the rows, printing XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
// ADD TO XML DOCUMENT NODE
echo '<marker ';
echo 'plaats="' . parseToXML($row['plaats']) . '" ';
echo 'locatie="' . parseToXML($row['locatie']) . '" ';
echo 'datum_begin="' . parseToXML($row['datum_begin']) . '" ';
echo 'datum_eind="' . parseToXML($row['datum_eind']) . '" ';
echo 'website="' . parseToXML($row['website']) . '" ';
echo 'Info="' . parseToXML($row['Info']) . '" ';
echo 'lat="' . $row['lat'] . '" ';
echo 'lng="' . $row['lng'] . '" ';
echo 'type="' . $row['type'] . '" ';
echo '/>';
}
// End XML file
echo '</markers>';
echo '<markers>';
// Iterate through the rows, printing XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
// ADD TO XML DOCUMENT NODE
echo '<marker ';
echo 'plaats="' . parseToXML($row['plaats']) . '" ';
echo 'locatie="' . parseToXML($row['locatie']) . '" ';
echo 'datum_begin="' . parseToXML($row['datum_begin']) . '" ';
echo 'datum_eind="' . parseToXML($row['datum_eind']) . '" ';
echo 'website="' . parseToXML($row['website']) . '" ';
echo 'Info="' . parseToXML($row['Info']) . '" ';
echo 'lat="' . $row['lat'] . '" ';
echo 'lng="' . $row['lng'] . '" ';
echo 'type="' . $row['type'] . '" ';
echo '/>';
}
// End XML file
echo '</markers>';
Gewijzigd op 01/01/1970 01:00:00 door Justin Groot
http://www.kermis.nu/indexpage.txt
http://www.kermis.nu/phpsqlajax_actueeloverzicht.txt
Dit is de XML output:
http://www.kermis.nu/phpsqlajax_actueeloverzicht.php
Deze pagina geeft duidelijke informatie:
http://www.whelp.nl/google-maps-adressen-markers/
Echter heb ik geen idee waar ik de JS moet verwerken en hoe ik vervolgens het ShowAddress deel moet toevoegen.
Gelieve Niet Bumpen::
Gewijzigd op 01/01/1970 01:00:00 door Justin Groot
Misschien kan dit script je nog een beetje verder helpen.
http://www.phphulp.nl/php/scripts/2/1379/
Dat scriptje werkt met dezelfde URL-aanvraag als ik je heb uitgelegd.
Als je dat scriptje ontleed zal je weeral wat wijzer worden op de manier HOE je zoiets kan verwerken met PHP.
Veel succes verder!
Wat ik nu probeer is om de gegevens in markers te laten plaatsen waardoor ik het via een ander bestand gemakkelijk kan ophalen. Ik kom tot onderstaande code, waarin de LAT en LNG netjes weergegeven worden (dat werkt dus!). Helaas krijg ik het niet voor elkaar om de de onderstaande codes (om er markers van te maken) er in te verwerken.
Dit moet erbij voor de markers:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
header("Content-type: text/xml");
// Start XML file, echo parent node
echo '<markers>';
// ADD TO XML DOCUMENT NODE
echo '<marker ';
echo '/>';
// End XML file
echo '</markers>';
// Start XML file, echo parent node
echo '<markers>';
// ADD TO XML DOCUMENT NODE
echo '<marker ';
echo '/>';
// End XML file
echo '</markers>';
Dit is mijn huidige code, werkend:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
header("cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
require("phpsqlajax_dbinfo.php");
function parseToXML($htmlStr)
{
$xmlStr=str_replace('<','<',$htmlStr);
$xmlStr=str_replace('>','>',$xmlStr);
$xmlStr=str_replace('"','"',$xmlStr);
$xmlStr=str_replace("'",''',$xmlStr);
$xmlStr=str_replace("&",'&',$xmlStr);
return $xmlStr;
}
// Opens a connection to a MySQL server
$connection=mysql_connect ($localhost, $username, $password);
if (!$connection) {
die('Not connected : ' . mysql_error());
}
// Set the active MySQL database
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
die ('Can\'t use db : ' . mysql_error());
}
// Select all the rows in the markers table
$query = "SELECT * FROM kermisoverzicht WHERE CURRENT_DATE() <= datum_eind AND CURRENT_DATE() >= datum_begin";
$result = mysql_query($query);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
while($row = mysql_fetch_array($result)) {
$locatie = "$row[2]";
$plaats = "$row[1]";
$apikey="ABQIAAAAZw8CT2s7UfYN5l6KArRr3BQbCREXyyBSr-lsz1UsNuNfBmODnBSH4g3PWHAFoVVxGM_jSdLPO5QSkA"; //vul hier jouw googlemaps API key in
$url = "http://maps.google.nl/maps/geo?output=csv&key=".$apikey."&q=".$locatie."+".$plaats;
if(false !== ($data = @file_get_contents($url)))
{
list(,,$longitude, $latitude) = explode(",",$data);
echo 'longitude="'. $longitude .'" '.PHP_EOL;
echo 'latitude="'. $latitude .'" '.PHP_EOL;
}
}
?>
header("cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
require("phpsqlajax_dbinfo.php");
function parseToXML($htmlStr)
{
$xmlStr=str_replace('<','<',$htmlStr);
$xmlStr=str_replace('>','>',$xmlStr);
$xmlStr=str_replace('"','"',$xmlStr);
$xmlStr=str_replace("'",''',$xmlStr);
$xmlStr=str_replace("&",'&',$xmlStr);
return $xmlStr;
}
// Opens a connection to a MySQL server
$connection=mysql_connect ($localhost, $username, $password);
if (!$connection) {
die('Not connected : ' . mysql_error());
}
// Set the active MySQL database
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
die ('Can\'t use db : ' . mysql_error());
}
// Select all the rows in the markers table
$query = "SELECT * FROM kermisoverzicht WHERE CURRENT_DATE() <= datum_eind AND CURRENT_DATE() >= datum_begin";
$result = mysql_query($query);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
while($row = mysql_fetch_array($result)) {
$locatie = "$row[2]";
$plaats = "$row[1]";
$apikey="ABQIAAAAZw8CT2s7UfYN5l6KArRr3BQbCREXyyBSr-lsz1UsNuNfBmODnBSH4g3PWHAFoVVxGM_jSdLPO5QSkA"; //vul hier jouw googlemaps API key in
$url = "http://maps.google.nl/maps/geo?output=csv&key=".$apikey."&q=".$locatie."+".$plaats;
if(false !== ($data = @file_get_contents($url)))
{
list(,,$longitude, $latitude) = explode(",",$data);
echo 'longitude="'. $longitude .'" '.PHP_EOL;
echo 'latitude="'. $latitude .'" '.PHP_EOL;
}
}
?>
De foutmeldingen die ik steeds krijg is "Cannot modify header information - headers already sent by" en dan reffereerd ie naar regel 49, waar de echo <marker> begint.
Code (php)
1
2
2
Warning: Cannot modify header information - headers already sent by (output started at /storage/mijndomein/users/097908/public/sites/www.kermis.nu/phpsqlajax_actueeloverzicht2.php:49) in /storage/mijndomein/users/097908/public/sites/www.kermis.nu/phpsqlajax_actueeloverzicht2.php on line 45
longitude="51.9552573" latitude="5.2263911" />
longitude="51.9552573" latitude="5.2263911" />
Dar is een resultaat bijvoorbeeld.
Kan je wellicht zien of ik iets fout doe? Alvast bedankt!!
Gewijzigd op 01/01/1970 01:00:00 door Justin Groot
Waarom gebruik je dan niet gewoon als "output=xml" in de google link?
Dan krijg je zo'n XML bestand teruggestuurd:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<kml xmlns="http://earth.google.com/kml/2.0">
<Response>
<name>1600 amphitheatre mountain view ca</name>
<Status>
<code>200</code>
<request>geocode</request>
</Status>
<Placemark>
<address>
1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA
</address>
<AddressDetails Accuracy="8">
<Country>
<CountryNameCode>US</CountryNameCode>
<AdministrativeArea>
<AdministrativeAreaName>CA</AdministrativeAreaName>
<SubAdministrativeArea>
<SubAdministrativeAreaName>Santa Clara</SubAdministrativeAreaName>
<Locality>
<LocalityName>Mountain View</LocalityName>
<Thoroughfare>
<ThoroughfareName>1600 Amphitheatre Pkwy</ThoroughfareName>
</Thoroughfare>
<PostalCode>
<PostalCodeNumber>94043</PostalCodeNumber>
</PostalCode>
</Locality>
</SubAdministrativeArea>
</AdministrativeArea>
</Country>
</AddressDetails>
<Point>
<coordinates>-122.083739,37.423021,0</coordinates>
</Point>
</Placemark>
</Response>
</kml>
<Response>
<name>1600 amphitheatre mountain view ca</name>
<Status>
<code>200</code>
<request>geocode</request>
</Status>
<Placemark>
<address>
1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA
</address>
<AddressDetails Accuracy="8">
<Country>
<CountryNameCode>US</CountryNameCode>
<AdministrativeArea>
<AdministrativeAreaName>CA</AdministrativeAreaName>
<SubAdministrativeArea>
<SubAdministrativeAreaName>Santa Clara</SubAdministrativeAreaName>
<Locality>
<LocalityName>Mountain View</LocalityName>
<Thoroughfare>
<ThoroughfareName>1600 Amphitheatre Pkwy</ThoroughfareName>
</Thoroughfare>
<PostalCode>
<PostalCodeNumber>94043</PostalCodeNumber>
</PostalCode>
</Locality>
</SubAdministrativeArea>
</AdministrativeArea>
</Country>
</AddressDetails>
<Point>
<coordinates>-122.083739,37.423021,0</coordinates>
</Point>
</Placemark>
</Response>
</kml>
Nu moet je de waarde <coordinates> eruithalen. En daar simpelweg een explode op toepassen en dan de LAT en LNG in je database stoppen doormiddel van een Query.
Normaal zou het je nu moeten lukken!
Good luck
edit: misschien kan dit je nog wel helpen.
Gewijzigd op 01/01/1970 01:00:00 door Dizzy