Tamin'ity volana ity dia nandamina fandaharana somary kely tao amin'ny PHP sy MySQL momba ny GIS aho. Nitsangatsangana manodidina ny harato aho, tena sarotra tamiko ny nahita ny sasany tamin'ireny Kajy ara-jeografika hahitana ny elanelana misy eo amin'ny toerana roa ka tiako zaraina eto.
Ny fomba tsotra fanaovana kajy ny elanelana misy teboka roa dia ny fampiasana ny formule Pythagorean mba hikajiana ny hypotenuse an'ny telozoro (A² + B² = C²). Izy io dia fantatra amin'ny hoe Halaviran'ny Euclidean.
Fanombohana mahaliana izany fa tsy mihatra amin'ny Jeografia satria ny elanelana misy ny latitude sy ny longitude dia tsy mitovy halavirana mitokana. Rehefa manakaiky ny ekoatera ianao dia mihalavitra ny tsipika latitude. Raha mampiasa karazana fampitoviana triangulation tsotra ianao dia mety handrefesana ny elanelan-tany araka ny marina amin'ny toerana iray izany ary diso be any amin'ny iray hafa, noho ny fihodin'ny Tany.
Halaviran'ny faribolana lehibe
Ireo zotra izay mandeha lavitra manodidina ny Tany dia fantatra amin'ny hoe Halaviran'ny faribolana lehibe. Izany hoe… ny elanelana fohy indrindra eo amin'ny teboka roa amin'ny baolina iray dia tsy mitovy amin'ny teboka eo amin'ny sarintany fisaka. Ampifandraiso amin'ny hoe tsy mitovy ny elanelan'ny latitude sy ny latitude… ary sarotra ny kajy.
Ity misy fanazavana video mahafinaritra momba ny fiasan'ny Great Circles.
Ny Formula Haversine
Ny halavirana mampiasa ny fihodinan'ny Tany dia tafiditra ao amin'ny Formula Haversine, izay mampiasa trigonometry hahafahana mamily ny tany. Rehefa mahita ny elanelana misy eo amin'ny toerana 2 eto an-tany ianao (rehefa manidina ny goaika) dia tsipika mahitsy dia tena arc.
Azo ampiharina amin'ny sidina an'habakabaka io - efa nijery ny sarintanin'ny sidina tena izy ve ianao ary nahatsikaritra fa misy andohalambo? Izany dia satria fohy kokoa ny manidina ao anaty andohalambo eo anelanelan'ny teboka roa noho ny mivantana amin'ilay toerana.
PHP: kajy ny elanelana misy eo amin'ny teboka 2 amin'ny latitude sy ny longitude
Ity ny raikipohy PHP amin'ny kajy ny elanelana misy teboka roa (miaraka amin'ny fiovam-po Mile vs. Kilometatra) voahodidin'ny teboka roa.
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));
}
Ny variables dia:
- $Latitude1 – miovaova ho an'ny latitude toerana voalohany anao.
- $Longitude1 – miovaova ho an'ny laharan'ny toeranao voalohany
- $Latitude2 – miovaova ho an'ny latitude toerana faharoa.
- $Longitude2 – miovaova ho an'ny laharan'ny toerana misy anao faharoa.
- $unit - ny default an'arivony. Ity dia azo havaozina na ampandalovina toy ny kilaometatra.
Python: Kajy ny halavirana eo anelanelan'ny teboka 2 amin'ny Latitude sy Longitude
Na izany na tsy izany, ity ny raikipohy Python amin'ny kajy ny elanelana misy teboka roa (miaraka amin'ny fiovam-po Mile vs. Kilometatra) voahodidin'ny teboka roa. Fanomezana ho an'ny zanako lahy, Bill Karr izay mpahay siansa momba ny data OpenINSIGHTS, ho an'ny kaody.
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)
Ny variables dia:
- latitude1 – miovaova ho an'ny toerana misy anao voalohany Latitude.
- longitude1 – miovaova ho an'ny toerana misy anao voalohany -jarahasina
- latitude2 – miovaova ho an'ny toerana misy anao faharoa Latitude.
- longitude2 – miovaova ho an'ny toerana misy anao faharoa -jarahasina.
- vondrona - ny default an'arivony. Ity dia azo havaozina na ampandalovina toy ny kilaometatra.
MySQL: maka ny rakitsoratra rehetra ao anatin'ny elanelana amin'ny alàlan'ny kajy ny halavirana amin'ny kilaometatra amin'ny fampiasana Latitude sy Longitude
Azo atao koa ny mampiasa SQL hanao kajy hahitanao ireo rakitsoratra rehetra ao anatin'ny halavirana manokana. Amin'ity ohatra ity dia hanontany ny MyTable ao amin'ny MySQL aho mba hahitako ireo firaketana rehetra izay ambany na mitovy amin'ny halaviran-dàlana $ (amin'ny Miles) amin'ny toerako amin'ny $ latitude sy $ longitude:
Ny fangatahana famerenana ireo rakitsoratra rehetra ao anaty iray manokana lavitra amin'ny fikajiana ny halaviran'ny kilaometatra eo anelanelan'ny teboka roa sy ny longitude dia:
$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."
Mila ampanjifainao ity:
- $-jarahasina - io dia fiovan'ny PHP izay andalovako ny longitude an'ilay teboka.
- $ Mponina - io dia fiovan'ny PHP izay andalovako ny longitude an'ilay teboka.
- $ lavitra - ity no elanelana tianao hahitanao ny firaketana rehetra ambany na mitovy aminy.
- table - ity ny latabatra… tianao ho soloina amin'ny anaranao latabatra izany.
- Latitude - ity no saha misy ny latitude misy anao.
- -jarahasina - ity no sehatry ny laharam-pehintany.
MySQL: maka ny firaketana rehetra ao anatin'ny elanelana amin'ny alalan'ny kajy ny halavirana kilometatra amin'ny fampiasana Latitude sy Longitude
Ary ity ny fangatahana SQL mampiasa kilometatra ao amin'ny MySQL:
$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."
Mila ampanjifainao ity:
- $-jarahasina - io dia fiovan'ny PHP izay andalovako ny longitude an'ilay teboka.
- $ Mponina - io dia fiovan'ny PHP izay andalovako ny longitude an'ilay teboka.
- $ lavitra - ity no elanelana tianao hahitanao ny firaketana rehetra ambany na mitovy aminy.
- table - ity ny latabatra… tianao ho soloina amin'ny anaranao latabatra izany.
- Latitude - ity no saha misy ny latitude misy anao.
- -jarahasina - ity no sehatry ny laharam-pehintany.
Nampiasako ity kaody ity tamin'ny sehatra an-tsarintany an-tsarintany izay nampiasainay ho an'ny fivarotana antsinjarany misy toerana maherin'ny 1,000 manerana an'i Amerika Avaratra ary niasa tsara izany.
Microsoft SQL Server Distance Geographic: STDistance
Raha mampiasa Microsoft SQL Server ianao dia manolotra ny asany manokana izy ireo, STDistance amin'ny kajy ny elanelana misy eo amin'ny teboka roa amin'ny fampiasana ny karazana angona Jeografia.
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);
Soso-kevitra ho an'i Manash Sahoo, VP sy Architect of Highbridge.
Misaotra betsaka amin'ny fizarana. Asa mandika sy mametaka mora io ary miasa tsara. Namonjy ahy be dia be ianao.
FYI ho an'izay mandefa mankany amin'ny C:
double deg2rad(double deg) { fiverenana deg*(3.14159265358979323846/180.0); }
Mahafinaritra be ny lahatsoratra - miasa tena tsara - tsy maintsy novana ny anaran'ny latabatra mitazona ny lat-long fotsiny aho. Mandeha haingana be izy io.. Manana lat-longs kely aho (<400) saingy heveriko fa mety tsara izany. Tranonkala mahafinaritra koa - vao nampidiriko tao amin'ny kaontiko del.icio.us ary hiverina tsy tapaka.
Misaotra indrindra Peter sy Kerry! Raha tianao ny miasa amin'ny tetikasa GIS dia manoro hevitra aho:
Misaotra indrindra… 😀
Nikaroka ny kajy halavirana nandritra ny andro aho ary nahita ny algorithm harversine, misaotra anao nanome ohatra momba ny fametrahana azy amin'ny fanambarana sql. Misaotra sy miarahaba, Daniel
Faly manampy, ry Rails namana!
Ankehitriny aho dia mitady asa PHP 'ao amin'ny Polygon' izay haka ny latitude sy ny latitude sequenced coordinates ary hamantatra raha misy teboka hafa ao anatiny na ivelan'ny polygon.
Hitako ny equation mba hamantarana raha misy teboka ao anaty polygon!
Heveriko fa mila fanambarana misy ny SQL anao.
fa tsy hoe WHERE distance <= $distance mety ilainao
mampiasa HAVING distance <= $distance
raha tsy izany dia misaotra noho ny namonjy ahy be dia be ny fotoana sy ny angovo.
Hi David,
Raha manao karazana fanambarana GROUP BY ianao dia mila MANANA. Tsy manao izany aho amin'ny ohatra etsy ambony.
Doug
Raha ny MySQL 5.x, tsy afaka mampiasa alias ianao amin'ny clause WHERE jereo http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html
Ampiasao ny HAVING fa tsy ny WHERE amin'ireo fanontaniana etsy ambony
Misaotra indrindra anao. Nanao asa lehibe ianao. Izany no tena tiako. Misaotra betsaka.
Misaotra betsaka nizara ity code ity. Namonjy ahy fotoana fampandrosoana betsaka izany. Ary koa, misaotra ny mpamaky anao nanamarika fa ilaina ny fanambarana HAVING ho an'ny MySQL 5.x. Tena manampy.
Sambatra aho manana mpamaky mahay kokoa noho izaho!
🙂
Mitsitsy fotoana be dia be ny raikipohy etsy ambony. Misaotra indrindra anao.
Tsy maintsy mifamadika amin'ny endrika NMEA sy Degree ihany koa aho. Nahita raikipohy aho tamin'ity URL ity teo amin'ny faran'ny pejy. http://www.errorforum.com/knowledge-base/16273-converting-nmea-sentence-latitude-longitude-decimal-degrees.html
Misy mahalala ny fomba hanamarina izany ve?
Misaotra anao!
Harry
Salama,
Fanontaniana hafa. Misy formula ho an'ny tady NMEA toa an'ity etsy ambany ity?
1342.7500,N,10052.2287,E
$GPRMC,032731.000,A,1342.7500,N,10052.2287,E,0.40,106.01,101106,,*0B
Misaotra,
Harry
Hitako ihany koa fa tsy niasa tamiko ny WHERE. Nanova azy ho HAVING ary mandeha tsara ny zava-drehetra. Tamin'ny voalohany dia tsy namaky ny fanehoan-kevitra aho ary namerina nanoratra izany tamin'ny alàlan'ny fisafidianana nested. Samy hiasa tsara izy roa.
Misaotra betsaka noho ny script voasoratra ao amin'ny mysql, tsy maintsy nanao fanitsiana kely fotsiny (MANANA) 🙂
Gret asa
Tena manampy tokoa, misaotra betsaka! Nanana olana kely aho tamin'ny "MANANA", fa tsy hoe "AIZA", fa raha vao namaky ny fanehoan-kevitra teto aho (rehefa afaka antsasak'adiny teo ho eo ny nifiko noho ny fahasorenana =P), dia azoko tsara ilay izy. Misaotra ^_^
misaotra betsaka miasa tsara
Ataovy ao an-tsaina fa ny fanambarana voafantina toy izany dia ho mafy be amin'ny fikajiana ary noho izany dia miadana. Raha manana fanontaniana be dia be ianao, dia mety hanimba zavatra haingana izany.
Ny fomba fiasa tsy dia mafimafy kokoa dia ny fampandehanana safidy voalohany (maotina) amin'ny alàlan'ny faritra SQUARE voafaritra amin'ny halavirana kajy izany hoe "safidio * amin'ny anaran'ny latabatra misy ny latitude eo anelanelan'ny lat1 sy lat2 ary ny latitude eo anelanelan'ny lon1 sy lon2". lat1 = targetlatitude - latdiff, lat2 = targetlatitude + latdiff, mitovy amin'ny lon. latdiff ~= halavirana / 111 (ho an'ny km), na halavirana/69 raha kilaometatra satria ny 1 degre amin'ny latitude dia ~ 111 km (fiovaova kely satria ny tany dia oval kely, saingy ampy ho an'io tanjona io). londiff = halavirana / (abs(cos(deg2rad(latitude))*111)) — na 69 amin'ny kilaometatra (azonao atao ny maka efamira kely lehibe kokoa mba hahitanao fiovana). Avy eo dia raiso ny vokatr'izany ary ampio amin'ny radial Select. Aza hadino fotsiny ny manisa ny koordinate ivelan'ny sisintany - izany hoe ny latitude ekena dia -180 hatramin'ny +180 ary ny latitude azo ekena dia -90 hatramin'ny +90 - raha toa ka mivoaka ivelan'io faritra io ny latdiff na londiff anao . Mariho fa amin'ny ankamaroan'ny tranga dia mety tsy azo ampiharina izany satria misy fiantraikany amin'ny kajy amin'ny tsipika mamakivaky ny ranomasimbe Pasifika manomboka amin'ny tsato-kazo mankany amin'ny tsato-kazo, na dia mifamatotra amin'ny ampahany amin'ny chukotka sy ny ampahany amin'ny alaska aza.
Ny zava-bitanay amin'izany dia fampihenana be ny isan'ny teboka anaovanao io kajy io. Raha manana teboka maneran-tany an-tapitrisany ianao ao amin'ny angon-drakitra zaraina mitovitovy ary te hikaroka ao anatin'ny 100 km ianao, dia amin'ny faritra 10000 km² ny fikarohanao voalohany (haingana) ary mety hamokatra valiny 20 eo ho eo (mifototra amin'ny fizarana mitovy amin'ny iray). velaran-tany manodidina ny 500M kilometatra toradroa), izay midika fa in-20 ny kajy halavirana sarotra ho an'ity fanontaniana ity fa tsy in-tapitrisa.
Fahadisoana kely amin'ny ohatra… mety ho ao anatin'ny 50 km (fa tsy 100) izany satria mijery ny “radius” amin'ny… kianjantsika isika.
Torohevitra mahafinaritra! Niara-niasa tamin'ny mpamorona iray aho izay nanoratra asa nanintona ny kianja anatiny ary avy eo dia asa miverimberina izay nanao 'kisary' manodidina ny vakim-paritra mba hampidirana sy hanilihana ireo teboka sisa. Vokatra haingana dia haingana ny vokatra - afaka nanombantombana teboka an-tapitrisany tao anatin'ny microseconds izy.
Ny fomba fiasako etsy ambony dia azo antoka fa 'tsy misy dikany' fa mahavita. Mamerina ny fisaorana anao!
Doug,
Nanandrana nampiasa mysql sy php aho mba hanombanana raha toa ka ao anatin'ny polygon ny teboka lava lava. Fantatrao ve raha namoaka ohatra momba ny fomba hanatanterahana an'io asa io ny namanao developer. Sa fantatrao ohatra tsara. Misaotra mialoha.
Salama daholo, ity no fanambarana SQL nataoko:
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
ary ny Mysql dia milaza amiko fa ny halavirana, tsy misy toy ny tsanganana, afaka mampiasa ny baiko aho, afaka manao izany aho tsy misy WHERE, ary miasa izany, fa tsy miaraka aminy ...
Soloy ny "WHERE distance" amin'ny "HAVING distance".
Miasa toy ny ody, misaotra, Douglas!
Tena tsara izany, saingy toy ny manidina ny vorona. Tena tsara ny manandrana sy mampiditra ny Google Maps API amin'izany (mety amin'ny fampiasana lalana sns.) Mba hanome hevitra fotsiny amin'ny fampiasana endrika fitaterana hafa. Mbola tsy maintsy manao asa annealing simulated amin'ny PHP aho izay afaka manolotra vahaolana mahomby amin'ny olan'ny mpivarotra mandehandeha. Saingy heveriko fa mety ho azoko ampiasaina indray ny kaody sasany hanaovana izany.
Salut Douglas,
misaotra betsaka anao tamin'ity lahatsoratra ity - namonjy ahy be dia be ianao.
Karakarao tsara ny tenanao,
nimrod @Israel
Lahatsoratra tsara! Nahita lahatsoratra be dia be aho mamaritra ny fomba kajy ny elanelana misy eo amin'ny teboka roa fa tena nitady ny snippet SQL aho.
Misaotra betsaka fa miasa tsara
Misaotra betsaka amin'ity formula ity. Niharatra elaela teo amin'ny tetik'asa toeram-pivarotana iray izay nisakafo tamiko.
Misaotra amboara. Ity andalana kely misy kaody ity dia namonjy ahy fotoana be tamin'ny tetikasa toerana fivarotana!
#1054 – tsanganana tsy fantatra 'halavirana' ao amin'ny 'faritra misy'
hanaiky
Torak'izany koa ny aty! Inona ny olana :-/? Ahoana no hamahana ny "lavitra" - Olana tsanganana? Ampio izahay azafady!! 🙂
Andramo mampiasa HAVING fa tsy WHERE
Fikarohana 2 andro mba hahitana farany ity pejy ity izay mamaha ny olako. Toa tsara kokoa ny manaisotra ny WolframAlpha-ko ary mandalina ny matematika. Ny fiovan'ny WHERE mankany HAVING dia manana ny script-ko amin'ny filaharan'ny asa. MISAOTRA ANAO
raha tokony hampiasa fehezanteny WHERE:
MANANA halavirana <50
Misaotra Georgi. Nahazo tsanganana 'distance' tsy hita foana aho. Indray mandeha aho manova ny AIZA ho MANANA dia niasa toy ny ody!
Maniry aho fa ity no pejy voalohany hitako tamin'ity. Taorian'ny nanandramana didy maro samihafa dia io ihany no miasa araka ny tokony ho izy, ary miaraka amin'ny fanovana kely ilaina mba hifanaraka amin'ny angon-drakitra manokana.
Misaotra betsaka!
Maniry aho fa ity no pejy voalohany hitako tamin'ity. Taorian'ny nanandramana didy maro samihafa dia io ihany no miasa araka ny tokony ho izy, ary miaraka amin'ny fanovana kely ilaina mba hifanaraka amin'ny angon-drakitra manokana.
Misaotra betsaka!
Misaotra betsaka!
Misaotra betsaka!
Heveriko fa tsy miseho intsony ilay kaody. Sao dia firefox?
Vao avy nanandrana tao amin'ny Firefox sy Chrome aho dia miseho. Andramo indray mandeha?
Salama. Misaotra betsaka. Izany dia miasa toy ny ody.
Misaotra betsaka Douglas. Miasa tonga lafatra izany.
Fantatro fa miasa io formula io, saingy tsy hitako hoe aiza no raisina ny radius ny tany. Misy afaka manazava ahy ve azafady?
Tim, raha mila fanazavana feno momba ny raikipohy Haversine (tsy kaody izany), jereo ny lahatsoratra Wikipedia: http://en.wikipedia.org/wiki/Haversine_formula
tsara tarehy! Tena nanampy ahy tokoa izany!
Zavatra tsara Douglas. Efa nanandrana nahazo ny teboka fifanenana ve ianao nomena ny Long/Lat/Bearing amin'ny teboka roa?
Mbola tsy nanao an'izany ry Khanh!
Misaotra anao Douglas, ny SQL Query no tena nilaiko, ary nihevitra aho fa tsy maintsy hanoratra izany ny tenako. Namonjy ahy tamin'ny mety ho ora fianarana latitude longitude ianao!
Mahazo Errormessage foana aho: tsanganana tsy fantatra 'Distance' ao amin'ny 'fizarana aiza' ao amin'ny MySQL Query.
Peter, azafady vakio ny fanehoan-kevitra hafa. Toa tsy maintsy nampiasa fehezanteny hafa ho an'ny WHERE/HAVING ny olona sasany.
Misaotra anao tamin'ity lahatsoratra mahafinaritra ity! Vao avy nanandrana ny kaody tao amin'ny DB-ko dia niasa tsara!
Douglas, misaotra anao amin'ity kaody mahagaga ity. Niresaka momba ny fomba hanaovana an'io tao amin'ny vavahadin-tserasera GPS-ko aho. Namonjy ahy ora maro ianao.
Mahafinaritra ny mandre ry Ash!
misaotra anao nandefa ity lahatsoratra mahasoa ity,
fa noho ny antony dia mba te hanontany aho
Ahoana ny fomba hahazoana ny elanelana misy ny coords ao anaty mysql db sy ny coords ampidirina amin'ny php ataon'ny mpampiasa?
mba hamaritana mazava kokoa:
1. Ny mpampiasa dia tsy maintsy mampiditra [id] amin'ny fisafidianana ny angona voatondro avy amin'ny db sy ny fandrindran'ny mpampiasa azy
2. Ny rakitra php dia mahazo ny angona kendrena (coords) mampiasa [id] ary kajy ny elanelana misy eo amin'ny mpampiasa sy ny teboka kendrena.
sa afaka maka halavirana fotsiny amin'ny code etsy ambany?
$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) toy ny halavirana AVY AMIN'NY `MyTable` AIZA ny halavirana >= “.$distance.” >>>>afaka "manala" ny elanelana eto ve aho?
mamerina ny fisaorana anao,
Timmy S
Tsy maninona, hitako ny fomba fiasan'ny "fonction" ao amin'ny php
$dis=getDistanceBetweenPointsNew($userLati, $userLongi, $lati, $longi, $unit = 'Km')
Misaotra betsaka!!
ok, tsy mandeha daholo izay nandramako. Ny tiako holazaina dia ny zavatra ananako miasa, fa ny halavirana lavitra.
Misy afaka mahita ny tsy mety amin'ity code ity ve?
if(isset($_POST['natolotra'])){ $z = $_POST['zipcode']; $r = $_POST['radius']; echo "Valin'ny ".$z; $sql = mysql_query(“MIFIDY M.ZIPcode, m.MktName,m.LocAddSt,m.LocAddCity,m.LocAddState,m.x1,m.y1,m.verified,z1.lat,z2.lon,z1. city,z1.state AVY amin'ny mrk m, zip z1, zip z2 AIZA m.zipcode = z1.zipcode SY z2.zipcode = $z SY (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 ") na maty (mysql_error()); while($row = mysql_fetch_array($sql)) {$store1 = $row['MktName'].""; $store = $row['LocAddSt'].””; $store .= $row['LocAddCity'].", ".$row['LocAddState']." “.$row['zipcode']; $latitude1 = $row['lat']; $longitude1 = $row['lon']; $latitude2 = $row['y1']; $longitude2 = $row['x1']; $city = $row['city']; $state = $row['state']; $dis = getnew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi'); // $dis = halavirana($lat1, $lon1, $lat2, $lon2); $verified = $row['verified']; if($verified == '1'){ echo “”; echo “”.$store.””; echo $dis . "kilometatra miala"; ako ""; } else { echo “”.$store.””; echo $dis . "kilometatra miala"; ako ""; } }}
my functions.php code
function getnew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi') { $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 'Mi': tapaka; tranga 'Km' : $distance = $distance * 1.609344; } miverina (boribory ($distance,2)); }
Misaotra mialoha
Misaotra anao tamin'ity lahatsoratra ity. Miasa tsara amin'ny code-ko. 🙂
Hey Douglas, lahatsoratra mahafinaritra. Hitako fa tena mahaliana ny fanazavanao momba ny foto-kevitra ara-jeografika sy ny kaody. Ny hany soso-kevitro dia ny hameno ny habaka sy indent ny kaody ho aseho (toy ny Stackoverflow, ohatra). Takatro fa te hitsitsy habaka ianao, fa ny elanelan'ny code / indentation mahazatra dia manamora kokoa ahy, amin'ny maha-programa ahy, mamaky sy manaparitaka. Na izany na tsy izany, zavatra kely izany. Tohizo ny asa lehibe.
Misaotra! Nanova kely ny lahatsoratra aho… fa ny equations dia maka toerana be ary lava loatra ka tsy azoko antoka fa manampy be loatra izany.
Misaotra anao indrindra.
eto raha mampiasa amin'ny asa isika dia mahazo karazana halavirana iray..raha mampiasa fanontaniana dia misy karazana halavirana hafa
Tsy hanao kajy ny elanelana misy eo amin'ny fanjakana roa aho
Misaotra betsaka anao…
Izany dia miasa tsara amin'ny cosinus. tsy mahay matematika aho fa misaotra e!
Asa tsara… 🙂 (y)
toa haingana kokoa (mysql 5.9) ny mampiasa indroa ny formula amin'ny safidy ary aiza:
$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 = 'SELECT *, '.$formula.' toy ny halaviran'ny latabatra AIZA '..$formula.' <= '.$distance;
Misaotra ...
tsy miasa raha
"AIZA ny halavirana"
miasa raha
"MANANA lavitra"
Misaotra betsaka amin'ny fanetezana ity lahatsoratra ity. Tena manampy tokoa.
PHP dia noforonina tamin'ny voalohany ho sehatra fanoratana tsotra antsoina hoe "Pejin-trano manokana". Amin'izao fotoana izao, ny PHP (ny fanafohezana ny Hypertext Preprocessor) dia solon'ny teknolojia Active Server Pages (ASP) an'ny Microsoft.
PHP dia fiteny mivelatra amin'ny lafiny server izay ampiasaina amin'ny famoronana pejy web mavitrika. Azo ampidirina amin'ny HTML izany. Ny PHP dia matetika ampiasaina miaraka amin'ny angon-drakitra MySQL amin'ny mpizara tranonkala Linux/UNIX. Io angamba no fiteny malaza indrindra amin'ny fanoratana soratra.
Hitako fa tsy mandeha tsara ny vahaolana etsy ambony.
Mila miova ho:
$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) toy ny halaviran'ny `register` “;
Misaotra Kupendra!
misaotra tompoko miasa tsara.. fa misy fanotaniana iray raha te hamoaka tsy misy isa desimal dia inona no azoko atao..?
Misaotra mialoha.
Salama, azafady fa tena mila ny fanampianao momba izany aho.
Nanao fangatahana get tamin'ny mpizara tranonkalako aho http://localhost:8000/users/findusers/53.47792/-2.23389/20/
53.47792 = $latitude
-2.23389 = $longitude
ary 20 = ny halavirana tiako alaina
Na izany aza, amin'ny fampiasana anao formula, dia mamerina ny andalana rehetra ao amin'ny db-ko
$results = DB::select(DB::raw(“SELECT *, (((acos(sin((“.$latitude.”.”*pi()/180))) * sin((lat*pi()/180 ))+cos((“.$latitude.”*pi()/180)) * cos((lat*pi()/180)) * cos(((“.$longitude.”- lng)*pi( )/180))))*180/pi())*60*1.1515*1.609344) toy ny halavirana avy amin'ny marika MANANA halavirana >= “.$distance ));
[{“id”:1,”name”:”Frankie Johnnie & Luigo Too”,”address”:”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”,”address”:”790 Castro St, Mountain View, CA”,”lat”:37.387138366699,”lng”: -122.08323669434,”distance”:16079.175940152},{“id”:3,”name”:”Kapp's Pizza Bar & Grill”,”address”:”191 Castro St, Mountain View, CA”,”lat”:37.393886566162, ”lng”:-122.07891845703,”distance”:16078.381373826},{“id”:4,”name”:”Round Table Pizza: Mountain View”,”adiresy”:”570 N Shoreline Blvd, Mountain View, CA”, ”lat”:37.402652740479,”lng”:-122.07935333252,”distance”:16077.420540582},{“id”:5,”name”:”Tony & Alba's Pizza & Pasta”,”adiresy”:”619 Escuela Ave. View, CA”,”lat”:37.394012451172,”lng”:-122.09552764893,”distance”:16078.563225154},{“id”:6,”name”:”Oregano's Wood-Fired Pizza”,”adiresy”:”4546 El Camino Real, Los Altos, CA”,”lat”:37.401725769043,”lng”:-122.11464691162,”distance”:16077.937560795},{“ id”:7,”name”:”The bars and grills”,”address”:”24 Whiteley Street, Manchester”,”lat”:53.485118865967,”lng”:-2.1828699111938,”distance”:8038.7620112314}]
Te haka andalana misy 20 kilaometatra fotsiny aho fa mitondra ny laharana rehetra. Azafady, inona no tsy mety ataoko
Mitady fanontaniana mitovitovy amin'izany aho fa nisondrotra kely - raha fintinina dia ny fanakambanana ny koordinate rehetra ao anatin'ny 2 kilaometatra amin'ny fandrindrana tsirairay ary avy eo manisa ny isan'ny koordinate ao amin'ny vondrona tsirairay ary tsy mamoaka afa-tsy vondrona iray izay manana fandrindrana be indrindra - na dia manana vondrona mihoatra ny iray ianao amin'ireo vondrona izay manana koordinate betsaka indrindra - avoahy fotsiny ny vondrona kisendrasendra avy amin'ireo vondrona manana isa lehibe indrindra -