Dadansoddeg a PhrofiLlwyfannau CRM a DataOffer Marchnata

Cyfrifo neu Ymholi Pellter Cylch Mawr Rhwng Pwyntiau Lledred a Hydred gan Ddefnyddio Fformiwla Haversine (PHP, JavaScript, Java, Python, MySQL, MSSQL Enghreifftiau)

Y mis yma, dwi wedi bod yn rhaglennu dipyn yn PHP ac MySQL ar gyfer GIS. Wrth ymchwilio i'r pwnc, cefais amser caled yn dod o hyd i rai o'r Cyfrifiadau daearyddol i ddarganfod y pellter rhwng dau leoliad, felly roeddwn i eisiau eu rhannu yma.

Map Hedfan Ewrop Gyda Phellter Cylch Mawr

Y ffordd syml o gyfrifo pellter rhwng dau bwynt yw defnyddio fformiwla Pythagorean i gyfrifo hypotenws triongl (A² + B² = C²). Gelwir hyn yn Pellter Ewclidaidd.

Dyna ddechrau diddorol, ond nid yw'n berthnasol i ddaearyddiaeth gan fod y pellter rhwng llinellau lledred a hydred yn nid pellteroedd cyfartal oddi wrth ei gilydd. Wrth i chi ddod yn nes at y cyhydedd, mae llinellau lledred yn mynd ymhellach oddi wrth ei gilydd. Os ydych yn defnyddio hafaliad triongli syml, gall fesur pellter yn gywir mewn un lleoliad ac yn anghywir yn y llall oherwydd crymedd y Ddaear.

Pellter Cylch Mawr

Mae'r llwybrau a deithiwyd yn bell o amgylch y Ddaear yn cael eu hadnabod fel y Pellter Cylch Mawr. Hynny yw... mae'r pellter byrraf rhwng dau bwynt ar sffêr yn wahanol i'r pwyntiau ar fap gwastad. Cyfunwch hynny â'r ffaith nad yw llinellau lledred a hydred yn union yr un peth ... ac mae gennych chi gyfrifiad anodd.

Dyma esboniad fideo gwych o sut mae Great Circles yn gweithio.

Fformiwla Haversine

Mae'r pellter sy'n defnyddio crymedd y Ddaear wedi'i ymgorffori yn fformiwla Haversine, sy'n defnyddio trigonometreg i ganiatáu ar gyfer crymedd y Ddaear. Pan fyddwch chi'n dod o hyd i'r pellter rhwng 2 le ar y Ddaear (fel yr hed y frân), mewn gwirionedd arc yw llinell syth.

Mae hyn yn berthnasol ar gyfer hedfan awyr - ydych chi erioed wedi edrych ar y map gwirioneddol o hediadau a sylwi eu bod yn fwaog? Mae hynny oherwydd bod hedfan mewn bwa rhwng dau bwynt yn fyrrach nag yn uniongyrchol i'r lleoliad.

PHP: Cyfrifwch y Pellter Rhwng 2 Bwynt Lledred a Hydred

Dyma'r fformiwla PHP ar gyfer cyfrifo'r pellter rhwng dau bwynt (ynghyd â thrawsnewid Milltir yn erbyn Cilomedr) wedi'i dalgrynnu i ddau le degol.

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)); 
}

Y newidynnau yw:

  • $ lledred1 – newidyn ar gyfer lledred eich lleoliad cyntaf.
  • $hydred1 – newidyn ar gyfer hydred eich lleoliad cyntaf
  • $ lledred2 – newidyn ar gyfer lledred eich ail leoliad.
  • $hydred2 – newidyn ar gyfer hydred eich ail leoliad.
  • $uned – y rhagosodiad yw milltiroedd. Gellir diweddaru hwn neu ei basio fel cilomedr.

Java: Cyfrifwch y Pellter Rhwng 2 Bwynt Lledred a Hydred

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;
    }
}

Y newidynnau yw:

  • lledred1 – newidyn ar gyfer lledred eich lleoliad cyntaf.
  • hydred1 – newidyn ar gyfer hydred eich lleoliad cyntaf
  • lledred2 – newidyn ar gyfer lledred eich ail leoliad.
  • hydred2 – newidyn ar gyfer hydred eich ail leoliad.
  • uned – y rhagosodiad yw milltiroedd. Gellir diweddaru hwn neu ei basio fel cilomedr.

Javascript: Cyfrifwch y Pellter Rhwng 2 Bwynt Lledred a Hydred

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);
    }
}

Y newidynnau yw:

  • lledred1 – newidyn ar gyfer lledred eich lleoliad cyntaf.
  • hydred1 – newidyn ar gyfer hydred eich lleoliad cyntaf
  • lledred2 – newidyn ar gyfer lledred eich ail leoliad.
  • hydred2 – newidyn ar gyfer hydred eich ail leoliad.
  • uned – y rhagosodiad yw milltiroedd. Gellir diweddaru hwn neu ei basio fel cilomedr.

Python: Cyfrifwch y Pellter Rhwng 2 Bwynt Lledred a Hydred

Dyma fformiwla Python ar gyfer cyfrifo'r pellter rhwng dau bwynt (ynghyd â thrawsnewid Milltir yn erbyn Cilomedr) wedi'i dalgrynnu i ddau le degol. Credyd i fy mab, Bill Karr, Gwyddonydd Data am AGOREDION, ar gyfer y cod.

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)

Y newidynnau yw:

  • lledred1 – newidyn ar gyfer eich lleoliad cyntaf lledred.
  • hydred1 – newidyn ar gyfer eich lleoliad cyntaf hydred
  • lledred2 – newidyn ar gyfer eich ail leoliad lledred.
  • hydred2 – newidyn ar gyfer eich ail leoliad hydred.
  • uned – y rhagosodiad yw milltiroedd. Gellir diweddaru hwn neu ei basio fel cilomedr.

MySQL: Adalw Pob Cofnod O Fewn Ystod Trwy Gyfrifo Pellter Mewn Milltiroedd Gan Ddefnyddio Lledred a Hydred

Mae defnyddio Mathau Data Gofodol yn MySQL yn ffordd fwy effeithlon a chyfleus o weithio gyda data daearyddol, gan gynnwys cyfrifo pellteroedd rhwng pwyntiau. Mae MySQL yn cefnogi Mathau Data Gofodol megis POINT, LINESTRING, a POLYGON, ynghyd â swyddogaethau gofodol fel ST_Distance.

Pan ddefnyddiwch y ST_Distance swyddogaeth yn MySQL gyda data daearyddol yn cael ei gynrychioli fel POINT cyfesurynnau, mae'n cymryd i ystyriaeth y crymedd o wyneb y Ddaear. Y model sfferig a ddefnyddir gan ST_Distance yn defnyddio fformiwla Haversine. Mae'r brasamcan hwn yn addas ar gyfer y rhan fwyaf o'r dibenion ymarferol ond gall gyflwyno mân wallau am bellteroedd hir iawn.

Dyma sut y gallwch gyfrifo pellteroedd rhwng dau bwynt gan ddefnyddio Mathau o Ddata Gofodol:

  1. Creu Tabl gyda Math o Ddata Gofodol: Yn gyntaf, creu tabl gyda a POINT colofn i storio pwyntiau daearyddol. Er enghraifft:
CREATE TABLE locations (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    coordinates POINT
);

Rhowch eich pwyntiau daearyddol yn y tabl hwn gan ddefnyddio'r POINT adeiladwr:

INSERT INTO locations (name, coordinates)
VALUES
    ('Point A', POINT(40.7128, -74.0060)), -- New York City
    ('Point B', POINT(34.0522, -118.2437)); -- Los Angeles
  1. Cyfrifo Pellter Gan Ddefnyddio ST_Distance: Gallwch gyfrifo'r pellter rhwng dau bwynt gan ddefnyddio'r ST_Distance swyddogaeth. Dyma ymholiad enghreifftiol i gyfrifo'r pellter rhwng dau bwynt:
SELECT
    id1,
    id2,
    (ST_Distance(coordinates1, coordinates2) / 1609.344) AS distance_in_miles
FROM (
    SELECT
        l1.id AS id1,
        l2.id AS id2,
        l1.coordinates AS coordinates1,
        l2.coordinates AS coordinates2
    FROM
        locations l1,
        locations l2
    WHERE
        l1.id = 1 AND l2.id = 2
) AS distances;

Disodli 1 ac 2 gydag IDau'r ddau bwynt rydych chi am gyfrifo'r pellter rhyngddynt.

  1. Canlyniad: Bydd yr ymholiad yn dychwelyd y pellter rhwng y ddau bwynt mewn milltiroedd.

Defnyddio Mathau Data Gofodol a'r ST_Distance Mae swyddogaeth yn darparu ffordd fwy effeithlon a chywir o weithio gyda data daearyddol yn MySQL. Mae hefyd yn symleiddio cyfrifo pellteroedd rhwng pwyntiau, gan ei gwneud yn haws rheoli a chwestiynu eich data.

MySQL: Adalw Pob Cofnod O Fewn Ystod Trwy Gyfrifo Pellter Mewn Cilomedrau Gan Ddefnyddio Lledred a Hydred

Yn ddiofyn ST_Distance yn dychwelyd y pellter mewn metrau, felly yn syml, mae angen i chi ddiweddaru'r ymholiad am gilometrau:

SELECT
    id1,
    id2,
    (ST_Distance(coordinates1, coordinates2) / 1000) AS distance_in_kilometers
FROM (
    SELECT
        l1.id AS id1,
        l2.id AS id2,
        l1.coordinates AS coordinates1,
        l2.coordinates AS coordinates2
    FROM
        locations l1,
        locations l2
    WHERE
        l1.id = 1 AND l2.id = 2
) AS distances;

Pellter Daearyddol Gweinyddwr SQL Microsoft: STDistance

Os ydych chi'n defnyddio Microsoft SQL Server, maen nhw'n cynnig eu swyddogaeth eu hunain, STPellter ar gyfer cyfrifo'r pellter rhwng dau bwynt gan ddefnyddio'r math o ddata Daearyddiaeth.

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);  

Awgrym i Manash Sahoo, VP a Phensaer Highbridge.

Douglas Karr

Douglas Karr yw sylfaenydd y Martech Zone ac arbenigwr cydnabyddedig ar drawsnewid digidol. Mae Douglas wedi helpu i ddechrau sawl cwmni newydd llwyddiannus ar gyfer MarTech, wedi cynorthwyo gyda’r diwydrwydd dyladwy o dros $5 bil mewn caffaeliadau a buddsoddiadau Martech, ac mae’n parhau i lansio ei lwyfannau a’i wasanaethau ei hun. Mae'n gyd-sylfaenydd Highbridge, cwmni ymgynghori trawsnewid digidol. Mae Douglas hefyd yn awdur cyhoeddedig canllaw Dummie a llyfr arweinyddiaeth busnes.

Erthyglau Perthnasol

78 Sylwadau

  1. Diolch yn fawr iawn am rannu. Roedd hon yn swydd copi a gludo hawdd ac mae'n gweithio'n wych. Rydych chi wedi arbed llawer o amser i mi.
    FYI i unrhyw un sy'n porthi i C:
    deg2rad dwbl (deg dwbl) {dychwelyd deg * (3.14159265358979323846 / 180.0); }

  2. Darn postio braf iawn - wedi gweithio'n neis iawn - dim ond enw'r bwrdd oedd yn dal y lat-hir oedd yn rhaid i mi ei newid. Mae'n gweithio'n eithaf cyflym i .. Mae gen i nifer rhesymol fach o lat-longs (<400) ond rwy'n credu y byddai hyn yn graddio'n braf. Safle neis hefyd - dwi newydd ei ychwanegu at fy nghyfrif del.icio.us a byddaf yn edrych yn ôl yn rheolaidd.

    1. Falch i helpu allan, rheiliau ffrind!

      Nawr rwy'n chwilio am swyddogaeth PHP 'in Polygon' a fydd yn cymryd amrywiaeth o gyfesurynnau lledred a hydred mewn trefn ac yn darganfod a yw pwynt arall o fewn neu y tu allan i'r polygon.

  3. Rwy'n credu bod angen datganiad ar eich SQL.
    yn lle BLE pellter <= $ pellter y gallai fod angen i chi ei wneud
    defnyddio pellter CAEL <= $ pellter

    fel arall diolch am arbed criw o amser ac egni i mi.

  4. Diolch yn fawr am rannu'r cod hwn. Arbedodd lawer o amser datblygu i mi. Hefyd, diolch i'ch darllenwyr am nodi bod WEDI datganiad yn angenrheidiol ar gyfer MySQL 5.x. Cymwynasgar iawn.

  5. Helo,

    Cwestiwn arall. A oes fformiwla ar gyfer llinynnau NMEA fel yr un isod?

    1342.7500, N, 10052.2287, E.

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

    Diolch,
    Harry

  6. Canfûm hefyd nad oedd WHERE yn gweithio i mi. Wedi'i newid i HAVING ac mae popeth yn gweithio'n berffaith. Ar y dechrau doeddwn i ddim yn darllen y sylwadau a'i ailysgrifennu gan ddefnyddio dewis nythu. Bydd y ddau yn gweithio'n iawn.

  7. Yn anhygoel o ddefnyddiol, diolch yn fawr iawn! Roeddwn yn cael rhai problemau gyda’r “HAVING” newydd, yn hytrach na “BLE”, ond unwaith i mi ddarllen y sylwadau yma (ar ôl tua hanner awr o falu fy nannedd mewn rhwystredigaeth = P), cefais iddo weithio’n braf. Diolch ^ _ ^

  8. Cadwch mewn cof y bydd datganiad dethol fel hwnnw yn ddwys yn gyfrifiadurol ac felly'n araf. Os oes gennych lawer o'r ymholiadau hynny, gall symud pethau i lawr yn eithaf cyflym.

    Dull llawer llai dwys yw rhedeg dewis cyntaf (crai) gan ddefnyddio ardal SQUARE a ddiffinnir gan bellter wedi'i gyfrifo hy “dewis * o enw tabl lle mae lledred rhwng lat1 a lat2 a hydred rhwng lon1 a lon2”. lat1 = targedledred – latdiff, lat2 = targedledred + laddiff, tebyg gyda lon. latdiff ~= pellter / 111 (ar gyfer km), neu bellter/69 am filltiroedd gan fod 1 gradd o lledred yn ~ 111 km (amrywiad bach gan fod y ddaear ychydig yn hirgrwn, ond yn ddigonol at y diben hwn). londiff = pellter / (abs(cos(deg2rad(lledred))*111)) - neu 69 am filltiroedd (gallwch mewn gwirionedd gymryd sgwâr ychydig yn fwy er mwyn rhoi cyfrif am amrywiadau). Yna cymerwch y canlyniad a'i fwydo i'r detholiad rheiddiol. Peidiwch ag anghofio rhoi cyfrif am gyfesurynnau y tu allan i'r ffiniau - hy yr ystod hydred derbyniol yw -180 i +180 a'r ystod lledred derbyniol yw -90 i +90 — rhag ofn bod eich latdiff neu londiff yn rhedeg y tu allan i'r ystod hon . Sylwch efallai na fydd hyn yn berthnasol yn y rhan fwyaf o achosion gan ei fod yn effeithio ar gyfrifiadau dros linell drwy'r cefnfor tawel o begwn i begwn yn unig, er ei fod yn croestorri rhan o chukotka a rhan o alasga.

    Yr hyn a gyflawnwn gan hyn yw gostyngiad sylweddol yn nifer y pwyntiau yr ydych yn gwneud y cyfrifiad hwn yn eu herbyn. Os oes gennych filiwn o bwyntiau byd-eang yn y gronfa ddata wedi'u dosbarthu'n fras yn gyfartal a'ch bod am chwilio o fewn 100 km, yna mae eich chwiliad cyntaf (cyflym) o ardal 10000 km sgwâr ac mae'n debyg y bydd yn esgor ar oddeutu 20 canlyniad (yn seiliedig ar ddosbarthiad cyfartal dros a arwynebedd arwyneb o tua 500M km sgwâr), sy'n golygu eich bod yn rhedeg y cyfrifiad pellter cymhleth 20 gwaith ar gyfer yr ymholiad hwn yn lle miliwn o weithiau.

      1. Cyngor ffantastig! Gweithiais mewn gwirionedd gyda datblygwr a ysgrifennodd swyddogaeth a dynnodd y sgwâr y tu mewn ac yna swyddogaeth ailadroddus a oedd yn gwneud 'sgwariau' o amgylch y perimedr i gynnwys ac eithrio'r pwyntiau sy'n weddill. Roedd y canlyniad yn ganlyniad hynod gyflym - gallai werthuso miliynau o bwyntiau mewn microseconds.

        Mae fy ymagwedd uchod yn bendant yn 'crai' ond yn alluog. Diolch eto!

        1. doug,

          Rwyf wedi bod yn ceisio defnyddio mysql a php i werthuso a yw pwynt hir lat o fewn polygon. Ydych chi'n gwybod a gyhoeddodd eich ffrind datblygwr unrhyw enghreifftiau ar sut i gyflawni'r dasg hon. Neu a ydych chi'n gwybod unrhyw enghreifftiau da. Diolch ymlaen llaw.

  9. Helo bawb, dyma fy natganiad SQL prawf:

    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

    ac mae Mysql yn dweud wrthyf nad yw'r pellter hwnnw'n bodoli fel colofn, gallaf ddefnyddio trefn trwy, gallaf ei wneud heb BLE, ac mae'n gweithio, ond nid gydag ef ...

  10. Mae hyn yn wych, fodd bynnag mae'n union fel mae'r adar yn hedfan. Byddai'n wych ceisio ymgorffori'r API mapiau google i hyn rywsut (gan ddefnyddio ffyrdd ac ati efallai.) Dim ond i roi syniad gan ddefnyddio math gwahanol o gludiant. Nid wyf eto wedi gwneud swyddogaeth anelio efelychiedig yn PHP a fyddai’n gallu cynnig datrysiad effeithlon i broblem y gwerthwr teithiol. Ond credaf efallai y byddaf yn gallu ailddefnyddio peth o'ch cod i wneud hynny.

  11. Erthygl dda! Fe wnes i ddod o hyd i lawer o erthyglau yn disgrifio sut i gyfrifo pellter rhwng dau bwynt ond roeddwn i wir yn edrych am y pyt SQL.

  12. 2 ddiwrnod o ymchwil i ddod o hyd i'r dudalen hon o'r diwedd sy'n datrys fy mhroblem. Yn edrych fel fy mod yn well chwalu fy WolframAlpha a gwella fy mathemateg. Mae'r newid o BLE i WEDI cael fy sgript yn gweithio'n iawn. DIOLCH

  13. Rwy'n dymuno mai hon oedd y dudalen gyntaf i mi ddod o hyd iddi ar hon. Ar ôl rhoi cynnig ar lawer o wahanol orchmynion, hwn oedd yr unig un i weithio'n iawn, a chyda'r newidiadau lleiaf posibl i ffitio fy nghronfa ddata fy hun.
    Diolch yn fawr!

  14. Rwy'n dymuno mai hon oedd y dudalen gyntaf i mi ddod o hyd iddi ar hon. Ar ôl rhoi cynnig ar lawer o wahanol orchmynion, hwn oedd yr unig un i weithio'n iawn, a chyda'r newidiadau lleiaf posibl i ffitio fy nghronfa ddata fy hun.
    Diolch yn fawr!

  15. Rwy'n gwybod bod y fformiwla hon yn gweithio, ond ni allaf weld lle mae radiws y ddaear yn cael ei ystyried. A all unrhyw un fy ngoleuo, os gwelwch yn dda?

  16. Diolch Douglas, yr Ymholiad SQL yw'r union beth yr oeddwn ei angen, ac roeddwn i'n meddwl y byddai'n rhaid i mi ei ysgrifennu fy hun. Rydych chi wedi fy achub rhag oriau o gromlin ddysgu hydred lledred o bosib!

  17. diolch am bostio'r erthygl ddefnyddiol hon,  
    ond am ryw reswm hoffwn ofyn
    sut i gael y pellter rhwng cordiau y tu mewn i mysql db a chordiau wedi'u mewnosod ar php gan ddefnyddiwr?
    disgrifiwch yn gliriach:
    Rhaid i 1.user fewnosod [id] ar gyfer dewis data penodedig o db a chordiau'r defnyddiwr ei hun
    2. mae'r ffeil php yn cael y data targed (coords) gan ddefnyddio [id] ac yna'n cyfrifo'r pellter rhwng y defnyddiwr a'r pwynt targed

    neu a all gael pellter o'r cod isod yn unig?

    $ qry = “SELECT *, (((acos (sin ((“. $ lledred. ”* pi () / 180)) * sin ((` Lledred` * pi () / 180)) + cos ((“. $ lledred. "* pi () / 180)) * cos ((` Lledred` * pi () / 180)) * cos (((“. $ hydred.” - `Hydred`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) fel pellter O `MyTable` LLE pellter> =". $ Pellter. " >>>> a gaf i “dynnu allan” y pellter oddi yma?
    Diolch eto,
    Timmy S.

    1. peidiwch â meddwl, rydw i wedi darganfod sut mae'r “swyddogaeth” yn gweithio yn php
      $ dis = getDistanceBetweenPointsNew ($ userLati, $ userLongi, $ lati, $ longi, $ unit = 'Km')
      Diolch yn fawr!! 

  18. iawn, nid yw popeth rydw i wedi rhoi cynnig arno yn gweithio. Hynny yw, mae'r hyn sydd gen i yn gweithio, ond mae'r pellteroedd yn bell i ffwrdd.

    A allai unrhyw un o bosibl weld beth sydd o'i le ar y cod hwn?

    os (isset ($ _ POST ['cyflwynwyd'])) {$ z = $ _POST ['zipcode']; $ r = $ _POST ['radiws']; adleisio “Canlyniadau ar gyfer“. $ 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. dinas, z1.state O mrk m, zip z1, zip z2 LLE m.zipcode = z1.zipcode A z2.zipcode = $ z A (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 ") neu farw (mysql_error ()); tra ($ rhes = mysql_fetch_array ($ sql)) {$ store1 = $ rhes ['MktName']. ""; $ store = $ rhes ['LocAddSt']. ""; $ store. = $ rhes ['LocAddCity']. ",". $ rhes ['LocAddState']. " “. $ Rhes ['zipcode']; $ lledred1 = $ rhes ['lat']; $ hydred1 = $ rhes ['lon']; $ lledred2 = $ rhes ['y1']; $ hydred2 = $ rhes ['x1']; $ dinas = $ rhes ['dinas']; $ state = $ rhes ['state']; $ dis = getnew ($ lledred1, $ hydred1, $ lledred2, $ hydred2, $ uned = 'Mi'); // $ dis = pellter ($ lat1, $ lon1, $ lat2, $ lon2); $ verified = $ rhes ['wedi'i wirio']; os ($ verified == '1') {adleisio ""; adleisio “”. $ storfa. ””; adleisio $ dis. ”Milltir (au) i ffwrdd”; adleisio “”; } arall {adleisio "". $ storfa. ""; adleisio $ dis. ”Milltir (au) i ffwrdd”; adleisio “”; }}}

    fy nghod functions.php
    getnew swyddogaeth ($ lledred1, $ hydred1, $ lledred2, $ hydred2, $ uned = 'Mi') {$ theta = $ hydred1 - $ hydred2; $ pellter = (sin (deg2rad ($ lledred1)) * sin (deg2rad ($ lledred2))) + (cos (deg2rad ($ lledred1)) * cos (deg2rad ($ lledred2)) * cos (deg2rad ($ theta)) ); $ pellter = acos ($ pellter); $ pellter = rad2deg ($ pellter); $ pellter = $ pellter * 60 * 1.1515; switsh ($ uned) {achos 'Mi': torri; achos 'Km': $ pellter = $ pellter * 1.609344; } dychwelyd (rownd ($ pellter, 2)); }

    Diolch ymlaen llaw

  19. Hei Douglas, erthygl wych. Roedd eich esboniad o'r cysyniadau daearyddol a'r cod yn ddiddorol iawn. Fy unig awgrym fyddai gofod a mewnoli'r cod i'w arddangos (fel Stackoverflow, er enghraifft). Rwy'n deall eich bod chi eisiau gwarchod lle, ond byddai bylchau / mewnoliad cod confensiynol yn ei gwneud hi'n llawer haws i mi, fel rhaglennydd, ddarllen a dyrannu. Beth bynnag, peth bach yw hynny. Daliwch ati gyda'r gwaith gwych.

  20. yma wrth ddefnyddio gyda swyddogaeth rydym yn cael un math o bellter ... gan ddefnyddio ymholiad ynghylch y math arall o bellter sydd i ddod

  21. mae'n ymddangos yn gyflymach (mysql 5.9) i ddefnyddio dwywaith y fformiwla yn y dewis a lle:
    $ fformiwla = “(((acos (sin ((“. $ lledred. ”* pi () / 180)) * sin ((` Lledred` * pi () / 180)) + cos ((“. $ lledred." ”* Pi () / 180)) * cos ((` Lledred` * pi () / 180)) * cos (((“. $ Hydred.” - `Hydred`) * pi () / 180))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) ”;
    $ sql = 'SELECT *,'. $ fformiwla. ' fel pellter O dabl LLE '.. $ fformiwla.' <= '. $ pellter;

  22. Diolch yn fawr am gneifio'r erthygl hon. Mae'n ddefnyddiol iawn.
    Ar y dechrau, crëwyd PHP fel platfform sgriptio syml o'r enw “Tudalen Gartref Bersonol”. Y dyddiau hyn mae PHP (y byr ar gyfer Rhagflaenydd Hypertestun) yn ddewis arall o dechnoleg Tudalennau Gweinydd Gweithredol (ASP) Microsoft.

    Mae PHP yn iaith ffynhonnell agored ar ochr y gweinydd a ddefnyddir ar gyfer creu tudalennau gwe deinamig. Gellir ei ymgorffori yn HTML. Defnyddir PHP fel arfer ar y cyd â chronfa ddata MySQL ar weinyddion gwe Linux / UNIX. Mae'n debyg mai hon yw'r iaith sgriptio fwyaf poblogaidd.

  23. Canfûm uchod nad oedd yr ateb yn gweithio'n iawn.
    Mae angen i mi newid i:

    $ qqq = “SELECT *, (((acos (sin ((“. $ lledred. ”* pi () / 180)) * sin ((` latt` * pi () / 180)) + cos ((”. $ lledred. "* pi () / 180)) * cos ((` latt` * pi () / 180)) * cos (((". $ hydred." - `longt`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515) fel pellter O `register`“;

  24. Helo, os gwelwch yn dda, bydd gwir angen eich help arnaf ar hyn.

    Gwneuthum gais cael gafael ar fy ngweinydd-we
    53.47792 = $ lledred
    -2.23389 = $ hydred
    a 20 = y pellter rydw i am ei adfer

    Fodd bynnag, gan ddefnyddio'ch fformiwla, mae'n adfer pob rhes yn fy db

    $results = DB::dewiswch( DB::raw("SELECT*, ((acos(pechod((".$lledred."pi()/180)) * pechod((latpi()/180))+cos((".$ lledred."pi()/180)) * cos((latpi()/180)) * cos((((“.$longitude."- lng)pi()/180))))180/pi())601.1515*1.609344) fel pellter O farcwyr SEFYLL Pellter >= “.$pellter ));

    [{“Id”: 1, ”enw”: “Frankie Johnnie & Luigo Too”, “cyfeiriad”: ”939 W El Camino Real, Mountain View, CA”, ”lat”: 37.386337280273, ”lng”: - 122.08582305908, “Pellter”: 16079.294719663}, {“id”: 2, ”enw”: “Pizzeria Arfordir Dwyrain Amici”, “cyfeiriad”: ”790 Castro St, Mountain View, CA”, “lat”: 37.387138366699, “lng”: -122.08323669434, “pellter”: 16079.175940152}, {“id”: 3, ”enw”: “Bar a Gril Pizza Kapp”, “cyfeiriad”: ”191 Castro St, Mountain View, CA”, “lat”: 37.393886566162, ”Lng”: - 122.07891845703, “pellter”: 16078.381373826}, {“id”: 4, ”enw”: “Pizza Bord Gron: Mountain View”, “cyfeiriad”: ”570 N Shoreline Blvd, Mountain View, CA”, ”Lat”: 37.402652740479, ”lng”: - 122.07935333252, “pellter”: 16077.420540582}, {“id”: 5, ”enw”: “Pizza & Pasta Tony & Alba”, “cyfeiriad”: ”619 Escuela Ave, Mountain View, CA ”,“ lat ”: 37.394012451172,” lng ”: - 122.09552764893,” pellter ”: 16078.563225154}, {“ id ”: 6,” enw ”:“ Pizza Pren-Fired Oregano ”,“ cyfeiriad ”:” 4546 El Camino Real, Los Altos, CA ”,“ lat ”: 37.401725769043,” lng ”: - 122.11464691162,” pellter ”: 16077.937560795}, {“ id ”: 7,” enw ”:“ Y bariau a’r griliau ”,“ cyfeiriad ”:” 24 Whiteley Street, Manceinion ”,” lat ”: 53.485118865967,” lng ”: - 2.1828699111938,“ pellter ”: 8038.7620112314}]

    Rwyf am adfer rhesi yn unig gydag 20 milltir ond mae'n dod â phob rhes. Os gwelwch yn dda beth ydw i'n ei wneud yn anghywir

  25. Rwy'n chwilio am ymholiad tebyg ond wedi camu i fyny ychydig - yn fyr, mae hyn i grwpio pob cyfesuryn o fewn 2 filltir i bob cyfesuryn ac yna cyfrif faint o gyfesurynnau ym mhob grŵp ac allbwn un grŵp yn unig sydd â'r nifer fwyaf o gyfesurynnau - hyd yn oed os mae gennych chi fwy nag un grŵp ymhlith grwpiau sydd â'r nifer fwyaf o gyfesurynnau - dim ond allbwn y grŵp ar hap o'r grwpiau sydd â'r un nifer fwyaf -

Beth ydych chi'n feddwl?

Mae'r wefan hon yn defnyddio Akismet i leihau sbam. Dysgwch sut mae eich data sylwadau yn cael ei brosesu.

Cau

Adblock Wedi'i Ganfod

Martech Zone yn gallu darparu'r cynnwys hwn i chi heb unrhyw gost oherwydd ein bod yn rhoi arian i'n gwefan trwy refeniw hysbysebu, dolenni cyswllt, a nawdd. Byddem yn gwerthfawrogi petaech yn cael gwared ar eich rhwystrwr hysbysebion wrth i chi edrych ar ein gwefan.