Gmaps

Status
Niet open voor verdere reacties.

exotic

Gebruiker
Lid geworden
10 jul 2007
Berichten
277
Beste allemaal,

Ik wil een script maken waarbij de bezoeker haar eigen postcode moet invullen.
het script moet dan in de database de 5 dichtsbijzijnde winkels weergeven.

mijn database ziet er zo uit:
winkels
- id
- naam
- postcode
postcode
- id
- lon
- lat

wie zou mij kunnen helpen?
Met vriendelijke groet,
Wesley
 
Dit heb ik al helemaal uitgepluist maar word er geen wijs uit.
Het is namelijk een opdracht voor school en er moet dus iets gemaakt worden waarbij ik op de site een invul veld heb waarbij de bezoeker een postcode of plaats en straal moet invullen.
aan de hand daarvan moeten de gegevens uit de database worden weergeven.

(google maps is daarbij NOG niet nodig)
voorbeeld Klikkerdeklik
 
Laatst bewerkt:
Het werkt indd, maar niet goed.
de afstand geeft niet de juiste waarden:
van: 3526CL naar 2802AC is 37.2 KM

op mijn site geeft het script 28.1 aan. (lijkt wel of google maps een rechte lijn trekt.)

verder wou ik nog weten hoe ik meer informatie kan weergeven van bepaalde vestigingen.
 
Laatst bewerkt:
Ja oke, maar ik weet niet hoe ik dus die gegevens uit de database moet halen via index.php?
bijvoorbeeld ik wil telefoon uit de database halen hoe doe ik dat dan?
 
Je hebt het voorbeeld overgenomen?
Die werkt met een XML-bestand waarin de data staat.

Die data komt vervolgens in een marker te staan, kwestie van de info toevoegen
 
Klopt :)

PHP:
$query = sprintf("SELECT address, name, lat, lng, ( 6371 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 5",

Deze haalt de gegevens uit de database..
Maar ik wil dus ook nog meer info hebben zoals bijvoorbeeld telefoon etc.. die staan in een andere tabel. namelijk extra.
hoe kan ik dan hieruit gegevens halen en die bij de juiste winkel plaatsen?

Ik snap het niet met de kilometers :S
 
Laatst bewerkt:
Als je bij het opvragen de data van de URL doorleest heb je zo de tijd lijkt mij.
PHP:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://maps.googleapis.com/maps/api/directions/json?origin=Toledo&destination=Madrid&region=es&sensor=false');
curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$data = curl_exec($ch);
curl_close($ch);
$json = json_decode($data);

echo $json->routes[0]->legs[0]->duration->text;
 
Nu snap ik het helemaaal niet meer..
hahaha..

Ik heb alles gewoon standaard zoals google beschreef.
precies hetzelfde.. heb alleen de radius aangepast naar de code voor KM.

waar moet ik jou code plaatsen dan?
 
Hmm probleem ligt anders dan ik dacht.

De query rekent nu de absolute afstand tussen de punten uit (wat ook klopt wanneer je binnen stralen in KM zoek)

Schijnbaar zegt jouw opdracht dat je de afstand in tijd moet meten, dat maakt het aardig wat lastiger te combineren.

Je zou dan eerst alle markers moeten opvragen dan daarna voor elke marker het laatste scriptje moeten draaien om de afstand in tijd te achterhalen. Oftewel inefficient en een killer voor de laadtijd van het script.

Tenzij jouw opdracht specifiek bedoelt dat je de 5 dichtstbijzijnde gebouwen op basis van tijd moet selecteren zou ik gewoon voor de absolute afstand gaan.
 
Hmm,
De pagina zelf geeft in de linker tabel het volgende:
Test winkel 1 (26.1)
Amersfoortseweg 9
Test winkel 2 (28.2)
Industriestraat 6, Gouda

en dat moet dus worden:
Test winkel 1 (ECHTE AFSTAND KM)
Amersfoortseweg 9
Test winkel 2 (ECHTE AFSTAND KM)
Industriestraat 6, Gouda

Er is wel een fucntie:
function initialize() {
geocoder = new GClientGeocoder();
gDir = new GDirections();
GEvent.addListener(gDir, "load", function() {
var drivingDistanceMiles = gDir.getDistance().meters / 1609.344;
var drivingDistanceKilometers = gDir.getDistance().meters / 1000;
document.getElementById('results').innerHTML = '<strong>Address 1: </strong>' + location1.address + ' (' + location1.lat + ':' + location1.lon + ')<br /><strong>Address 2: </strong>' + location2.address + ' (' + location2.lat + ':' + location2.lon + ')<br /><strong>Driving Distance: </strong>' + drivingDistanceMiles + ' miles (or ' + drivingDistanceKilometers + ' kilometers)';
});
Ik snap alleen niet hoe ik deze moet integreren.
Lijkt mij dat de $query gewoon aangepast moet worden?
 
Laatst bewerkt:
Je kunt de query niet aanpassen naar een relatieve afstand.

Hoe ziet je code er tot nu toe uit?
 
Ik heb wel wat gevonden:
Hoe google het zegt:
PHP:
$query = sprintf("SELECT address, name, lat, lng, ( 6371 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 5",

Ik gebruik nog steeds die van google, zoek me eigen kapot :P

Op een andere site kwam ik dit tegen
PHP:
$query = "SELECT adress, name, lat, lng, 
(((acos(sin(('$getlat'*pi()/180)) * sin((latitude*pi()/180)) + 
cos(('$getlat'*pi()/180)) * cos((latitude*pi()/180)) * cos((('$getlng' 
- longitude)*pi()/180))))*180/pi())*60*1.1515) as distance FROM 
markers HAVING distance <= '$radius' ORDER BY distance LIMIT 0, 50 ";
 
Je kunt genoeg queries opzoeken maar ze blijven absoluut.

Geen enkele query kan rekening houden met de weg zonder dat daar data van bekend is. Aangezien die data niet enkel wiskundig te berekenen valt gaat je dat nooit lukken.

Daarnaast zorgt de query meteen al voor een filtering omdat hij HAVING gebruikt.
 
dus het gaat nooit lukken?
andere websites hebben het ook voor elkaar gekregen..
Google zelf heeft ook een route berekening.?

Raar..
Maar goed, hoe kan ik dan in ieder geval dingen laten zien in de popup van een marker? zoals telefoon nummer? (die uit een andere tabel worden gehaald? )
 
Google heeft routeberekening omdat het geen rekening houdt met andere punten.

Dat is gewoon van punt A naar punt B met eventueel nog X tussenstappen.
Dat kun je eenvoudig met de Directions API regelen

Als je alle informatie in de XML stopt kun je ze gewoon met JS uitlezen en in de marker plaatsen
 
Hmm, ik heb wel een scriptje gevonden met afstandsberekening:
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"  xmlns:v="urn:schemas-microsoft-com:vml">
  <head>
<title>Connectcase.nl: Gratis afstand berekening tussen twee plaatsen met Google Maps</title>
<meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" />
<meta name="description" content="Gratis afstand berekening tussen twee plaatsen met Google Maps ipv. postcode tabel">
<meta name="keywords" content="afstand, berekening, kosten, twee, plaatsen, google maps, postcode, tabel, distance, calculation">
<meta name="abstract" content="Gratis afstand berekening tussen twee plaatsen met Google Maps ipv. postcode tabel">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="verify-v1" content="K8eGACCrm4Azib1o2Tk+4UQ9UJX1jk5WtQzsx4f8hVQ=" /> 
<meta name="y_key" content="b0c2a0e275c4c2b0" />
<meta name="revisit-after" content="7 Days" />
<meta name="ratings" content="general" />
<meta name="copyright" content="Connectcase © 2008">
<meta name="robots" content="all">
<meta name="language" content="nl">
<meta name="author" content="Connectcase.nl">
<meta name="copyright" content="Connectcase">
<meta http-equiv="Window-target" content="_top">

<script src="http://maps.google.nl/maps?file=api&amp;v=2&amp;key=ABQIAAAAEOe-MThhhCIOMKwWDPbwhRRS8CkXXPt5sVVf4YkaT1EeWYX3cBRwsjSrpuJm-goUrjhfsUYusXdklQ" type="text/javascript"></script>
<script type="text/javascript">

    function initialize() 
    {
      if (GBrowserIsCompatible()) 
      {
        // nieuw object ZONDER parameters, want we willen nl. geen geschreven route EN geen map tonen....
        // http://code.google.com/apis/maps/documentation/reference.html#GDirections
        gdir = new GDirections();
        GEvent.addListener(gdir,"load", set_distance); 
      }
    }

    function setDirections(fromAddress, toAddress, locale) 
    {
    // http://code.google.com/apis/maps/documentation/reference.html#GDirectionsOptions
    gdir.load("from: " + fromAddress + " to: " + toAddress, {locale: locale, travelMode:G_TRAVEL_MODE_DRIVING,avoidHighways: false} );
    }

    function set_distance() 
    {
    // extra: foutafhandeling, kan handig zijn!!!
    handleErrors(); 
    document.getElementById("afstand").innerHTML = gdir.getDistance().html; 
    }
    
  function handleErrors()
  {
  // http://code.google.com/apis/maps/documentation/reference.html#GGeoStatusCode
   if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
     alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
   else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
     alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
   else if (gdir.getStatus().code == G_GEO_MISSING_QUERY || gdir.getStatus().code == G_GEO_MISSING_ADDRESS)
     alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
   else if (gdir.getStatus().code == G_GEO_BAD_KEY)
     alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
   else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
     alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
   else if (gdir.getStatus().code == G_GEO_UNAVAILABLE_ADDRESS)
     alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gdir.getStatus().code);
   else if (gdir.getStatus().code == G_GEO_UNKNOWN_DIRECTIONS)
     alert("The GDirections object could not compute directions between the points mentioned in the query. This is usually because there is no route available between the two points, or because we do not have data for routing in that region.\n Error code: " + gdir.getStatus().code);     
   else if (gdir.getStatus().code == G_GEO_TOO_MANY_QUERIES)
     alert("The given key has gone over the requests limit in the 24 hour period or has submitted too many requests in too short a period of time.\n Error code: " + gdir.getStatus().code);     
    }

  </script>

  </head>
<body onload="initialize()" onunload="GUnload()">
<form action="#" onsubmit="setDirections(this.from.value, this.to.value, 'nl'); return false">
<table border="0">
<tr>
<td>van:&nbsp;</td><td><input type="text" size="40" id="fromAddress" name="from" value="zuiddijk 415, zaandam"/></td>
<td>naar:&nbsp;</td><td><input type="text" size="40" id="toAddress" name="to" value="zuiddijk 101, zaandam" /></td>
<td><input tabindex="1" name="submit" type="submit" value="Bereken afstand!" /></td>
</tr>
</table>
</form>
<div id="afstand"></div>
</body>
</html>
Zou dit mss in het script dat ik nu heb te verwerken zijn??
 
Laatst bewerkt:
Zomaar zaken van het internet af halen en in elkaar proberen te zetten heeft nog nooit gewerkt.

Daarnaast werkt dat script nog met een API-key, iets dat tegenwoordig niet meer nodig is voor Google Maps.

Maak eerst eens een bestand dat een XML van je markers maakt.
Daarna maak je een bestand dat de markers via JS inlaad en op een kaart laat zien.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan