CRM- en dataplatformsAnalise en toetsingBemarkingsinstrumente

Bereken of bevraagteken groot sirkelafstand tussen punte van breedtegraad en lengtegraad deur gebruik te maak van die Haversine-formule (PHP, JavaScript, Java, Python, MySQL, MSSQL-voorbeelde)

Hierdie maand het ek nogal 'n bietjie in PHP en MySQL geprogrammeer met betrekking tot GIS. Snuffel rond die net, ek het eintlik 'n moeilike tyd om sommige van die te vind Geografiese berekeninge om die afstand tussen twee plekke te vind, so ek wou dit hier deel.

Vliegkaart Europa met groot sirkelafstand

Die eenvoudige manier om 'n afstand tussen twee punte te bereken, is deur die Pythagorese formule te gebruik om die skuinssy van 'n driehoek te bereken (A² + B² = C²). Dit staan ​​bekend as die Euklidiese afstand.

Dit is 'n interessante begin, maar dit is nie van toepassing op Geografie nie, aangesien die afstand tussen breedte- en lengtelyne nie gelyke afstande van mekaar is nie. Soos jy nader aan die ewenaar kom, raak breedtelyne verder uitmekaar. As jy 'n eenvoudige triangulasievergelyking gebruik, kan dit afstand akkuraat meet op een plek en verkeerd op die ander, as gevolg van die kromming van die Aarde.

Groot sirkelafstand

Die roetes wat lang afstande om die Aarde afgelê word, staan ​​bekend as die Grootsirkelafstand. Dit wil sê... die kortste afstand tussen twee punte op 'n sfeer verskil van die punte op 'n plat kaart. Kombineer dit met die feit dat breedte- en lengtelyne nie ewe ver is nie ... en jy het 'n moeilike berekening.

Hier is 'n fantastiese video-uiteensetting van hoe Great Circles werk.

Die Haversine-formule

Die afstand wat die kromming van die Aarde gebruik, is ingesluit in die Haversine-formule, wat trigonometrie gebruik om voorsiening te maak vir die aarde se kromming. Wanneer jy die afstand tussen 2 plekke op aarde vind (soos die kraai vlieg), is 'n reguit lyn eintlik 'n boog.

Dit is van toepassing in lugvlug – het jy al ooit na die werklike kaart van vlugte gekyk en opgemerk dat hulle geboë is? Dit is omdat vlieg in 'n boog tussen twee punte korter is as direk na die ligging.

PHP: Bereken afstand tussen 2 punte van breedte en lengte

Hier is die PHP-formule vir die berekening van die afstand tussen twee punte (saam met Mile vs. Kilometer-omskakeling) afgerond tot twee desimale plekke.

function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'miles') {
  $theta = $longitude1 - $longitude2; 
  $distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta))); 
  $distance = acos($distance); 
  $distance = rad2deg($distance); 
  $distance = $distance * 60 * 1.1515; 
  switch($unit) { 
    case 'miles': 
      break; 
    case 'kilometers' : 
      $distance = $distance * 1.609344; 
  } 
  return (round($distance,2)); 
}

Die veranderlikes is:

  • $Latitude1 – 'n veranderlike vir jou eerste ligging se breedtegraad.
  • $lengtegraad1 – 'n veranderlike vir jou eerste ligging se lengtegraad
  • $Latitude2 – 'n veranderlike vir jou tweede ligging se breedtegraad.
  • $lengtegraad2 – 'n veranderlike vir jou tweede ligging se lengtegraad.
  • $eenheid – die verstekwese myl. Dit kan opgedateer word of deurgegee word as kilometer.

Java: Bereken afstand tussen 2 punte van breedte- en lengtegraad

public static double getDistanceBetweenPointsNew(double latitude1, double longitude1, double latitude2, double longitude2, String unit) {
    double theta = longitude1 - longitude2;
    double distance = 60 * 1.1515 * (180/Math.PI) * Math.acos(
        Math.sin(latitude1 * (Math.PI/180)) * Math.sin(latitude2 * (Math.PI/180)) + 
        Math.cos(latitude1 * (Math.PI/180)) * Math.cos(latitude2 * (Math.PI/180)) * Math.cos(theta * (Math.PI/180))
    );
    if (unit.equals("miles")) {
        return Math.round(distance, 2);
    } else if (unit.equals("kilometers")) {
        return Math.round(distance * 1.609344, 2);
    } else {
        return 0;
    }
}

Die veranderlikes is:

  • breedtegraad 1 – 'n veranderlike vir jou eerste ligging se breedtegraad.
  • lengtegraad 1 – 'n veranderlike vir jou eerste ligging se lengtegraad
  • breedtegraad 2 – 'n veranderlike vir jou tweede ligging se breedtegraad.
  • lengtegraad 2 – 'n veranderlike vir jou tweede ligging se lengtegraad.
  • eenheid – die verstekwese myl. Dit kan opgedateer word of deurgegee word as kilometer.

Javascript: Bereken afstand tussen 2 punte van breedtegraad en lengtegraad

function getDistanceBetweenPoints(latitude1, longitude1, latitude2, longitude2, unit = 'miles') {
    let theta = longitude1 - longitude2;
    let distance = 60 * 1.1515 * (180/Math.PI) * Math.acos(
        Math.sin(latitude1 * (Math.PI/180)) * Math.sin(latitude2 * (Math.PI/180)) + 
        Math.cos(latitude1 * (Math.PI/180)) * Math.cos(latitude2 * (Math.PI/180)) * Math.cos(theta * (Math.PI/180))
    );
    if (unit == 'miles') {
        return Math.round(distance, 2);
    } else if (unit == 'kilometers') {
        return Math.round(distance * 1.609344, 2);
    }
}

Die veranderlikes is:

  • breedtegraad 1 – 'n veranderlike vir jou eerste ligging se breedtegraad.
  • lengtegraad 1 – 'n veranderlike vir jou eerste ligging se lengtegraad
  • breedtegraad 2 – 'n veranderlike vir jou tweede ligging se breedtegraad.
  • lengtegraad 2 – 'n veranderlike vir jou tweede ligging se lengtegraad.
  • eenheid – die verstekwese myl. Dit kan opgedateer word of deurgegee word as kilometer.

Python: Bereken afstand tussen 2 punte van breedte- en lengtegraad

In elk geval, hier is die Python-formule vir die berekening van die afstand tussen twee punte (saam met Mile vs. Kilometer-omskakeling) afgerond tot twee desimale plekke. Krediet aan my seun, Bill Karr wat 'n datawetenskaplike is vir Maak INSIGTE oop, vir die kode.

from numpy import sin, cos, arccos, pi, round

def rad2deg(radians):
    degrees = radians * 180 / pi
    return degrees

def deg2rad(degrees):
    radians = degrees * pi / 180
    return radians

def getDistanceBetweenPointsNew(latitude1, longitude1, latitude2, longitude2, unit = 'miles'):
    
    theta = longitude1 - longitude2
    
    distance = 60 * 1.1515 * rad2deg(
        arccos(
            (sin(deg2rad(latitude1)) * sin(deg2rad(latitude2))) + 
            (cos(deg2rad(latitude1)) * cos(deg2rad(latitude2)) * cos(deg2rad(theta)))
        )
    )
    
    if unit == 'miles':
        return round(distance, 2)
    if unit == 'kilometers':
        return round(distance * 1.609344, 2)

Die veranderlikes is:

  • breedtegraad 1 – 'n veranderlike vir jou eerste ligging s'n breedtegraad.
  • lengtegraad 1 – 'n veranderlike vir jou eerste ligging s'n lengtegraad
  • breedtegraad 2 – 'n veranderlike vir jou tweede ligging s'n breedtegraad.
  • lengtegraad 2 – 'n veranderlike vir jou tweede ligging s'n lengtegraad.
  • eenheid – die verstekwese myl. Dit kan opgedateer word of deurgegee word as kilometer.

MySQL: Haal alle rekords binne 'n reeks op deur afstand in myl te bereken deur breedte- en lengtegraad te gebruik

Dit is ook moontlik om SQL te gebruik om alle rekords binne 'n spesifieke afstand te bereken. In hierdie voorbeeld gaan ek MyTable in MySQL navraag doen om al die rekords te vind wat minder as of gelyk is aan veranderlike $afstand (in myl) na my ligging by $latitude en $longitude:

Die navraag om al die rekords in 'n spesifieke op te spoor afstand deur die afstand in myl te bereken tussen twee breedte- en lengtepunte is:

$query = "SELECT *, (((acos(sin((".$latitude."*pi()/180)) * sin((`latitude`*pi()/180)) + cos((".$latitude."*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((".$longitude."- `longitude`)*pi()/180)))) * 180/pi()) * 60 * 1.1515) as distance FROM `table` WHERE distance <= ".$distance."

U moet dit aanpas:

  • $ lengte - dit is 'n PHP-veranderlike waar ek die lengte van die punt deurgee.
  • $ breedtegraad - dit is 'n PHP-veranderlike waar ek die lengte van die punt deurgee.
  • $ afstand - dit is die afstand waarop u al die rekords minder of gelyk wil vind.
  • tafel - dit is die tabel ... u wil dit vervang deur u tafelnaam.
  • breedtegraad - dit is die veld van u breedtegraad.
  • lengtegraad - dit is die veld van u lengtegraad.

MySQL: Haal alle rekords binne 'n reeks op deur afstand in kilometers te bereken deur breedte- en lengtegraad te gebruik

En hier is die SQL-vraag wat kilometers in MySQL gebruik:

$query = "SELECT *, (((acos(sin((".$latitude."*pi()/180)) * sin((`latitude`*pi()/180)) + cos((".$latitude."*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((".$longitude."- `longitude`) * pi()/180)))) * 180/pi()) * 60 * 1.1515 * 1.609344) as distance FROM `table` WHERE distance <= ".$distance."

U moet dit aanpas:

  • $ lengte - dit is 'n PHP-veranderlike waar ek die lengte van die punt deurgee.
  • $ breedtegraad - dit is 'n PHP-veranderlike waar ek die lengte van die punt deurgee.
  • $ afstand - dit is die afstand waarop u al die rekords minder of gelyk wil vind.
  • tafel - dit is die tabel ... u wil dit vervang deur u tafelnaam.
  • breedtegraad - dit is die veld van u breedtegraad.
  • lengtegraad - dit is die veld van u lengtegraad.

Ek het hierdie kode gebruik in 'n kaarteplatform vir ondernemings wat ons gebruik het vir 'n kleinhandelwinkel met meer as 1,000 XNUMX plekke in Noord-Amerika, en dit het pragtig gewerk.

Microsoft SQL Server Geografiese Afstand: STDistance

As jy Microsoft SQL Server gebruik, bied hulle hul eie funksie, STAfstand vir die berekening van die afstand tussen twee punte deur die Geografie-datatipe te gebruik.

DECLARE @g geography;  
DECLARE @h geography;  
SET @g = geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326);  
SET @h = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);  
SELECT @g.STDistance(@h);  

Hoedpunt aan Manash Sahoo, VP en argitek van Highbridge.

Douglas Karr

Douglas Karr is die stigter van die Martech Zone en 'n erkende kenner van digitale transformasie. Douglas het gehelp om verskeie suksesvolle MarTech-opstartondernemings te begin, het gehelp met die omsigtigheidsondersoek van meer as $5 miljard in Martech-verkrygings en -beleggings, en gaan voort om sy eie platforms en dienste bekend te stel. Hy is 'n medestigter van Highbridge, 'n konsultasiefirma vir digitale transformasie. Douglas is ook 'n gepubliseerde skrywer van 'n Dummie-gids en 'n besigheidsleierskapboek.

verwante Artikels

78 Comments

  1. Baie dankie vir die deel. Dit was 'n maklike kopieer en plak werk en werk uitstekend. Jy het my baie tyd gespaar.
    FYI vir enigiemand wat na C oordra:
    double deg2rad(dubbel deg) { return deg*(3.14159265358979323846/180.0); }

  2. Baie mooi stukkie plasing – het baie mooi gewerk – ek moes net die naam verander van die tafel wat die lat-long hou. Dit werk redelik vinnig om .. Ek het 'n redelike klein aantal lat-longs (< 400) maar ek dink dit sal mooi skaal. Lekker webwerf ook – ek het dit sopas by my del.icio.us-rekening gevoeg en sal gereeld terugkyk.

    1. Bly om te help, rels vriend!

      Nou is ek op soek na 'n 'in veelhoek' PHP-funksie wat 'n reeks opeenvolgende breedte- en lengtegraadkoördinate sal neem en uitvind of 'n ander punt binne of buite die veelhoek is.

  3. Ek dink jou SQL het 'n stelling nodig.
    in plaas van WHERE afstand <= $afstand wat jy dalk moet
    gebruik HAVING afstand <= $afstand

    anders dankie dat jy my 'n klomp tyd en energie gespaar het.

  4. Baie dankie vir die deel van hierdie kode. Dit het my baie ontwikkelingstyd gespaar. Dankie ook aan jou lesers wat daarop gewys het dat 'n HAVING-verklaring nodig is vir MySQL 5.x. Baie behulpsaam.

  5. Hallo,

    Nog 'n vraag. Is daar 'n formule vir NMEA-stringe soos die een hieronder?

    1342.7500,N,10052.2287,E

    $GPRMC,032731.000,A,1342.7500,N,10052.2287,E,0.40,106.01,101106,,*0B

    Dankie,
    Harry

  6. Ek het ook gevind dat WHERE nie vir my gewerk het nie. Het dit verander na HAVING en alles werk perfek. Ek het eers nie die opmerkings gelees nie en het dit herskryf met 'n geneste kies. Albei sal net goed werk.

  7. Ongelooflik nuttig, baie dankie! Ek het 'n bietjie probleme gehad met die nuwe "HAVING", eerder as "WHERE", maar sodra ek die kommentaar hier gelees het (na so 'n halfuur se tande gekners van frustrasie =P), het ek dit goed laat werk. Dankie ^_^

  8. Hou in gedagte dat so 'n uitgesoekte stelling baie berekeningsintensief en dus stadig sal wees. As jy baie van daardie navrae het, kan dit dinge redelik vinnig laat val.

    'n Veel minder intensiewe benadering is om 'n eerste (kru) seleksie te gebruik deur 'n VIERKANTE area te gebruik wat deur 'n berekende afstand gedefinieer word, dws "kies * uit tabelnaam waar breedtegraad tussen lat1 en lat2 en lengtegraad tussen lon1 en lon2". lat1 = targetlatitude – latdiff, lat2 = targetlatitude + latdiff, soortgelyk aan lon. latdiff ~= afstand / 111 (vir km), of afstand/69 vir myl aangesien 1 breedtegraad ~ 111 km is (effe variasie aangesien die aarde effens ovaal is, maar voldoende vir hierdie doel). londiff = afstand / (abs(cos(deg2rad(breedtegraad))*111)) — of 69 vir myl (jy kan eintlik 'n effens groter vierkant neem om rekening te hou met variasies). Neem dan die resultaat daarvan en voer dit in die radiale kies in. Moet net nie vergeet om buitegrenskoördinate in ag te neem nie – dws die bereik van aanvaarbare lengtegraad is -180 tot +180 en die bereik van aanvaarbare breedtegraad is -90 tot +90 – ingeval jou latdiff of londiff buite hierdie reeks loop . Let daarop dat dit in die meeste gevalle dalk nie van toepassing is nie, aangesien dit slegs berekeninge oor 'n lyn deur die Stille Oseaan van pool tot pool beïnvloed, hoewel dit wel 'n deel van tsjoekotka en 'n deel van alaska sny.

    Wat ons hiermee bereik, is 'n aansienlike vermindering in die aantal punte waarteen jy hierdie berekening maak. As jy 'n miljoen globale punte in die databasis het wat ongeveer eweredig versprei is en jy wil binne 100 km soek, dan is jou eerste (vinnige) soektog van 'n oppervlakte 10000 vk km en sal waarskynlik ongeveer 20 resultate oplewer (gebaseer op eweredige verspreiding oor 'n oppervlakte van ongeveer 500M vk km), wat beteken dat jy die komplekse afstandberekening 20 keer vir hierdie navraag uitvoer in plaas van 'n miljoen keer.

      1. Fantastiese raad! Ek het eintlik met 'n ontwikkelaar gewerk wat 'n funksie geskryf het wat die binnekant vierkant getrek het en dan 'n rekursiewe funksie wat 'vierkante' om die omtrek gemaak het om die oorblywende punte in te sluit en uit te sluit. Die resultaat was 'n ongelooflike vinnige resultaat - hy kon miljoene punte in mikrosekondes evalueer.

        My benadering hierbo is beslis 'kru' maar bekwaam. Weereens dankie!

        1. doug,

          Ek het probeer om mysql en php te gebruik om te evalueer of 'n lat-langpunt binne 'n veelhoek is. Weet jy of jou ontwikkelaarvriend enige voorbeelde gepubliseer het oor hoe om hierdie taak uit te voer. Of ken jy enige goeie voorbeelde. Dankie by voorbaat.

  9. Hallo almal, dit is my toets SQL-stelling:

    SELECT DISTINCT area_id, (
    (
    (
    acos( sin( ( 13.65 * pi( ) /180 ) ) * sin( (
    `lat_dec` * pi( ) /180 ) ) + cos( ( 13.65 * pi( ) /180 ) ) * cos( (
    `lat_dec` * pi( ) /180 )
    ) * cos( (
    ( 51.02 - `lon_dec` ) * pi( ) /180 )
    )
    )
    ) *180 / pi( )
    ) *60 * 1.1515 * 1.609344
    ) AS distance
    FROM `post_codes` WHERE distance <= 50

    en Mysql sê vir my dat afstand, nie as 'n kolom bestaan ​​nie, ek kan volgorde gebruik deur, ek kan dit doen sonder WAAR, en dit werk, maar nie daarmee nie ...

  10. Dit is wonderlik, maar dit is net soos die voëls vlieg. Dit sal wonderlik wees om op een of ander manier die Google Maps API hierby te probeer inkorporeer (dalk deur paaie te gebruik, ens.) Net om 'n idee te gee deur 'n ander vorm van vervoer te gebruik. Ek moet nog 'n gesimuleerde uitgloeiingsfunksie in PHP maak wat 'n doeltreffende oplossing vir die reisende verkoopsmanprobleem sal kan bied. Maar ek dink dat ek dalk van jou kode kan hergebruik om dit te doen.

  11. Goeie artikel! Ek het baie artikels gevind wat beskryf hoe om afstand tussen twee punte te bereken, maar ek was regtig op soek na die SQL-brokkie.

  12. 2 dae se navorsing om uiteindelik hierdie bladsy te vind wat my probleem oplos. Dit lyk of ek beter my WolframAlpha uithaal en my wiskunde opknap. Die verandering van WHERE na HAVING het my skrif in werkende toestand. DANKIE

  13. Ek wens dit was die eerste bladsy wat ek hieroor gevind het. Nadat ek baie verskillende opdragte probeer het, was dit die enigste een wat behoorlik gewerk het, en met minimale veranderinge wat nodig was om by my eie databasis te pas.
    Thanks a lot!

  14. Ek wens dit was die eerste bladsy wat ek hieroor gevind het. Nadat ek baie verskillende opdragte probeer het, was dit die enigste een wat behoorlik gewerk het, en met minimale veranderinge wat nodig was om by my eie databasis te pas.
    Thanks a lot!

  15. dankie vir die plasing van hierdie nuttige artikel,  
    maar om een ​​of ander rede wil ek vra
    hoe om die afstand te kry tussen koördinate binne mysql db en koorde wat deur gebruiker in php ingevoeg is?
    vir meer duidelik beskryf:
    1.gebruiker moet [id] invoeg om gespesifiseerde data uit db en gebruiker self se koördinate te kies
    2. die php-lêer kry die teikendata (koördinate) met [id] en bereken dan die afstand tussen gebruiker en teikenpunt

    of kan jy eenvoudig afstand kry van die kode hieronder?

    $qry = “SELECT *,(((acos(sin((“.$latitude.”*pi()/180)) * sin((`Latitude`*pi()/180))+cos((“. $latitude.”*pi()/180)) * cos((`Latitude`*pi()/180)) * cos(((“.$longitude.”- `Longitude`)*pi()/180) )))*180/pi())*60*1.1515*1.609344) as afstand VANAF `MyTabel` WAAR afstand >= ".$afstand." >>>>kan ek die afstand hiervandaan “uithaal”?
    weereens dankie,
    Timmy S

  16. ok, alles wat ek probeer het, werk nie. Ek bedoel, wat ek het, werk, maar die afstande is ver.

    Kan iemand dalk sien wat fout is met hierdie kode?

    if(isset($_POST['voorgelê'])){ $z = $_POST['poskode']; $r = $_POST['radius']; eggo "Resultate vir ".$z; $sql = mysql_query(“SELECT DISTINCT m.zipcode, m.MktName,m.LocAddSt,m.LocAddCity,m.LocAddState,m.x1,m.y1,m.verified,z1.lat,z2.lon,z1. stad,z1.staat VANAF mrk m, zip z1, zip z2 WAAR m.poskode = z1.poskode EN z2.poskode = $z EN (3963 * acos( truncate( sin( z2.lat / 57.2958 ) * sin( m. y1 / 57.2958 ) + cos( z2.lat / 57.2958 ) * cos( m.y1 / 57.2958 ) * cos( m.x1 / 57.2958 – z2.lon / 57.2958 ) , 8 ) r ") ) of die $ (mysql_error()); while($row = mysql_fetch_array($sql)) { $store1 = $row['MktName'].""; $store = $row['LocAddSt'].””; $store .= $row['LocAddCity'].”, “.$row['LocAddState'].” “.$ry['poskode']; $latitude1 = $ry['lat']; $longitude1 = $ry['lon']; $latitude2 = $ry['y1']; $longitude2 = $ry['x1']; $stad = $ry['stad']; $staat = $ry['staat']; $dis = getnew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi'); // $dis = afstand($lat1, $lon1, $lat2, $lon2); $verified = $row['verified']; if($verified == '1'){ eggo “”; eggo "".$winkel.""; eggo $dis . " myle weg"; eggo ""; } else { eggo "".$store.""; eggo $dis . " myle weg"; eggo ""; } }}

    my funksies.php-kode
    funksie getnew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi') { $theta = $longitude1 – $longitude2; $afstand = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)) ); $afstand = acos($afstand); $afstand = rad2deg($afstand); $afstand = $afstand * 60 * 1.1515; switch ($ eenheid) { geval 'Mi': breek; geval 'Km' : $afstand = $afstand * 1.609344; } terugkeer (ronde($afstand,2)); }

    Dankie by voorbaat

  17. Hallo Douglas, goeie artikel. Ek het jou verduideliking van die geografiese konsepte en die kode baie interessant gevind. My enigste voorstel sal wees om die kode te spasieer en in te trek vir vertoon (soos Stackoverflow, byvoorbeeld). Ek verstaan ​​dat jy spasie wil bespaar, maar konvensionele kodespasiëring / inkeping sal dit vir my, as 'n programmeerder, baie makliker maak om te lees en te dissekteer. In elk geval, dit is 'n klein dingetjie. Hou aan met die groot werk.

  18. dit lyk vinniger (mysql 5.9) om twee keer die formule in die kies te gebruik en waar:
    $formula = “(((acos(sin((“.$latitude.”*pi()/180)) * sin((`Latitude`*pi()/180))+cos((“.$latitude. ”*pi()/180)) * cos((`Latitude`*pi()/180)) * cos(((“.$longitude.”- `Longitude`)*pi()/180)))) *180/pi())*60*1.1515*1.609344)”;
    $sql = 'KIES *, '.$formule.' as afstand VANAF tabel WHERE '..$formula.' <= '.$afstand;

  19. Baie dankie dat jy hierdie artikel geknip het. dit is baie nuttig.
    PHP is aanvanklik geskep as 'n eenvoudige skrifplatform genaamd "Persoonlike tuisblad". Deesdae is PHP (die kort vir Hypertext Preprocessor) 'n alternatief van Microsoft se Active Server Pages (ASP) tegnologie.

    PHP is 'n oopbron bediener-kant taal wat gebruik word vir die skep van dinamiese webblaaie. Dit kan in HTML ingebed word. PHP word gewoonlik saam met 'n MySQL-databasis op Linux/UNIX-webbedieners gebruik. Dit is waarskynlik die gewildste skriftaal.

  20. Ek het gevind dat bogenoemde oplossing nie behoorlik werk nie.
    Ek moet verander na:

    $qqq = “SELECT *,(((acos(sin((“.$latitude.”*pi()/180)) * sin((`latt`*pi()/180))+cos((” . $latitude . “*pi()/180)) * cos((`latt`*pi()/180)) * cos(((” . $longitude . “- `longt`)*pi()/180) )))*180/pi())*60*1.1515) as afstand VAN `register` “;

  21. Hallo, asseblief, ek sal regtig jou hulp hieroor nodig hê.

    Ek het 'n kry versoek aan my web-bediener http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    53.47792 = $breedtegraad
    -2.23389 = $lengtegraad
    en 20 = die afstand wat ek wil haal

    Maar deur jou formule te gebruik, haal dit alle rye in my db op

    $results = DB::select( DB::raw(“SELECT *, (((acos(sin((“.$latitude.”*pi()/180)) * sin((lat*pi()/180 ))+cos((“.$latitude.”*pi()/180)) * cos((lat*pi()/180)) * cos(((“.$lengtegraad.”- lng)*pi( )/180))))*180/pi())*60*1.1515*1.609344) as afstand VANAF merkers MET afstand >= “.$afstand ));

    [{"id":1,"name":"Frankie Johnnie & Luigo Too","adres":"939 W El Camino Real, Mountain View, CA","lat":37.386337280273,"lng":-122.08582305908, "distance":16079.294719663},{"id":2,"name":"Amici's East Coast Pizzeria","adres":"790 Castro St, Mountain View, CA","lat":37.387138366699,"lng": -122.08323669434,”distance”:16079.175940152},{“id”:3,”name”:”Kapp's Pizza Bar & Grill”,”adres”:”191 Castro St, Mountain View, CA”,”lat”:37.393886566162, ”lng”:-122.07891845703,”distance”:16078.381373826},{“id”:4,”name”:”Round Table Pizza: Mountain View”,”adres”:”570 N Shoreline Blvd, Mountain View, CA”, ”lat”:37.402652740479,”lng”:-122.07935333252,”distance”:16077.420540582},{“id”:5,”name”:”Tony & Alba's Pizza & Pasta”,”adres”:”619 Mountain Escuela View, CA”,,”lat”:37.394012451172,”lng”:-122.09552764893,”distance”:16078.563225154},{“id”:6,”name”:”Oregano's Wood-Fired Pizza”,”adres”:”4546 El Camino Real, Los Altos, CA”,”lat”:37.401725769043,”lng”:-122.11464691162,”afstand”:16077.937560795},{“ id":7,"name":"Die kroeë en roosters","adres":"Whiteleystraat 24, Manchester","lat":53.485118865967,"lng":-2.1828699111938,"afstand":8038.7620112314}]

    Ek wil net rye met 20 myl haal, maar dit bring alle rye. Asseblief wat doen ek verkeerd

  22. Ek is op soek na 'n soortgelyke navraag, maar het 'n bietjie verskerp – kortliks is dit om alle koördinate binne 2 myl van elke koördinaat te groepeer en dan te tel hoeveel koördinate in elke groep en slegs een groep uit te voer wat die meeste koördinate het – selfs al jy het meer as een groep onder groepe wat die meeste koördinate het – voer eenvoudig die ewekansige groep uit van die groepe met dieselfde grootste getal –

Wat dink jy?

Hierdie webwerf gebruik Akismet om spam te verminder. Leer hoe jou opmerking verwerk is.