Misschien dat dit script al ergens bestaat, maar ik ben voor iemand opzoek naar een script waar een bedrijf zich kan aanmelden en daarin aangeeft waar het zich bevindt en kan aangeven binnen hoeveel afstand hun werk gebied is (km).

Uiteindelijk kan de klant doormiddel van postcode en huisnummer een offerte van dit bedrijf ontvangen als het binnen het werkgebied valt (afstand ingegeven door t bedrijf)

Iemand enig idee of hier al een (basis) script van is of hoe ik hier aan kan beginnen?
Een kant en klaar script kan ik niet vinden, maar de beschikbare bedrijven kan je met deze query opzoeken:


<?php
$sql= sprintf("
SELECT latitude, longitude, ( 6371 * acos( cos( radians('%s') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( latitude ) ) ) ) AS distance FROM tabel 
HAVING distance < '%s' 
ORDER BY distance 
LIMIT 0 , 20",
  mysqli_real_escape_string($con,$latitude),
  mysqli_real_escape_string($con,$longitude),
  mysqli_real_escape_string($con,$latitude),
  mysqli_real_escape_string($con,'25'));
mysqli_query($con,$sql);
?>


Ik heb deze query zelf gevonden met wat Google-werk en heb het niet getest. Maar ik hoop dat je hier wat mee kan.
Je zou met behulp van de Google Maps API een leuke webapplicatie kunnen maken:


// Marker van een bedrijf op de map plaatsen
var marker = new google.maps.Marker({
  map: map,
  position: new google.maps.LatLng(53, -2.5),
  title: 'Een bedrijf'
});

// Radius
var circle = new google.maps.Circle({
  map: map,
  radius: 10000,    // 10 kilometer
  fillColor: '#AA0000'
});
circle.bindTo('center', marker, 'position');


Voor meer informatie: https://developers.google.com/maps/
Ik heb nu deze code in gebruik en hij werkt prima

<?php
$query_zoek = sprintf("SELECT bedrijfsnaam, latitude, longitude, werkgebied, ( 6371 * acos( cos( radians('%s') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( latitude ) ) ) ) AS distance FROM bedrijven HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20",   mysqli_real_escape_string($link,$latitude),
  mysqli_real_escape_string($link,$longitude),
  mysqli_real_escape_string($link,$latitude),
  mysqli_real_escape_string($link,'25'));
?>


Nu wil ik alleen dat waar nu 25 staat dat hier uit de database uit de kolom werkgebied de afstand gehaald wordt. Hoe krijg ik dit voor elkaar?
In deze kolom staat dus het aantal kilometers wat het werkgebied is van dit bedrijf.
Je krijgt toch de distance van je query?

( 6371 * acos( cos( radians('%s') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( latitude ) ) ) ) AS distance
Ik zou eerder uitgaan van de reisafstand en reistijd. Dat kan mooi met de Google Maps Distance Matrix API.

In waterland Nederland kun je namelijk op 1 km afstand van elkaar zitten maar wel 25 km moeten omrijden omdat er een kanaal of rivier in de weg zit.
Randy vsf op 26/02/2016 10:06:18

Je krijgt toch de distance van je query?

( 6371 * acos( cos( radians('%s') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( latitude ) ) ) ) AS distance

Distance is de afstand tussen het gevonden bedrijf en de invoer van de klant. Hier heb ik dus niets aan, als het bedrijf zich aanmeldt geven ze een werkgebied aan dus bijvoorbeeld wij werken binnen een straal van 75 km. Dit wordt in de kolom "Werkgebied" ingevuld. En de invoer van die kolom wil ik op de plek waar nu "25" staat.
Uiteindelijk moet hij alleen de bedrijven weergeven die qua afstand kunnen (als dit binnen hun werkgebied valt).
Kun je de kolom "afstand" niet in de where zetten?
<?php

"SELECT bedrijfsnaam, latitude, longitude, werkgebied,
( 6371 * acos( cos( radians('%s') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( latitude ) ) ) ) AS distance
FROM bedrijven
WHERE ( 6371 * acos( cos( radians('%s') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( latitude ) ) ) ) < kolomafstand
ORDER BY distance
LIMIT 0 , 20";

?>
-Mirkin - op 26/02/2016 12:56:54

[quote="Randy vsf op 26/02/2016 10:06:18"]
Je krijgt toch de distance van je query?

( 6371 * acos( cos( radians('%s') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( latitude ) ) ) ) AS distance

Distance is de afstand tussen het gevonden bedrijf en de invoer van de klant. Hier heb ik dus niets aan, als het bedrijf zich aanmeldt geven ze een werkgebied aan dus bijvoorbeeld wij werken binnen een straal van 75 km. Dit wordt in de kolom "Werkgebied" ingevuld. En de invoer van die kolom wil ik op de plek waar nu "25" staat.
Uiteindelijk moet hij alleen de bedrijven weergeven die qua afstand kunnen (als dit binnen hun werkgebied valt).

[/quote]

Je hebt de formule, en je hebt de data neem ik aan?
Wat is dan het probleem, en wat heb je al geprobeerd?

Randy vsf op 26/02/2016 16:14:59

[quote="-Mirkin - op 26/02/2016 12:56:54"]
[quote="Randy vsf op 26/02/2016 10:06:18"]
Je krijgt toch de distance van je query?

( 6371 * acos( cos( radians('%s') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( latitude ) ) ) ) AS distance

Distance is de afstand tussen het gevonden bedrijf en de invoer van de klant. Hier heb ik dus niets aan, als het bedrijf zich aanmeldt geven ze een werkgebied aan dus bijvoorbeeld wij werken binnen een straal van 75 km. Dit wordt in de kolom "Werkgebied" ingevuld. En de invoer van die kolom wil ik op de plek waar nu "25" staat.
Uiteindelijk moet hij alleen de bedrijven weergeven die qua afstand kunnen (als dit binnen hun werkgebied valt).

[/quote]

Je hebt de formule, en je hebt de data neem ik aan?
Wat is dan het probleem, en wat heb je al geprobeerd?


[/quote]
Het probleem is zoals ik al beschreef dat die 25 de maximale afstand is een straal van de locatie van het bedrijf, maar voor elk bedrijf kan die straal anders en die informatie wil ik uit de tabel halen waar de gegevens van het bedrijf in staan..

Even ter verduidelijking, deze 25:
mysqli_real_escape_string($link,'25'));
je hebt mijn post ook gezien?

Die gegeven afstand (werkbare afstand die bedrijf opgaf) van het bedrijf moet je tegen de formule houden om te zien of hij voldoet.

Die formule is trouwens redelijk complex.
Ik weet niet of het om 1000-en records gaat? Want dan kan de query mogelijk traag worden.

Je moet namelijk voor elk record in de tabel bedrijven de berekening uitvoeren.

Misschien is het eenvoudiger om een vierkant te nemen voor de formule ipv iets wat een cirkel is en rekeing houdt met de kromming van de aarden.

Neem aan dat het geen probleem is als de afstand soms 27.2 km is.



Reageren