Bulan ieu kuring parantos ngerjakeun program rada dina PHP sareng MySQL perkawis GIS. Snooping sakitar jaring, saleresna kuring sesah mendakan sababaraha Itungan geografis pikeun milarian jarak antara dua lokasi janten kuring hoyong ngabagi di dieu.
Cara saderhana pikeun ngitung jarak antara dua titik nyaéta ngagunakeun rumus Pythagorean pikeun ngitung hénbéntus segitiga (A + + B² = C²). Ieu katelah Jarak Euclidean.
Éta mimiti anu pikaresepeun tapi henteu dilarapkeun sareng Géografi sabab jarak antara garis lintang sareng bujur teu sarua jarak papisah. Nalika anjeun caket kana khatulistiwa, garis lintang bakal jauh. Upami anjeun nganggo sababaraha jenis persamaan triangulasi saderhana, éta tiasa ngukur jarak akurat dina hiji lokasi sareng parah pisan di tempat anu sanés, kusabab lengkungan Bumi.
Jarak Circle hébat
Rute anu ditempuh jarak jauh di sakuliling Bumi dikenal salaku Jarak Circle hébat. Nyaéta… jarak pangdeukeutna antara dua titik dina hiji bal béda ti titik dina peta datar. Gabungkeun éta sareng kanyataan yén garis lintang sareng bujur henteu sajajar… sareng anjeun gaduh itungan anu sesah.
Kieu penjelasan pidéo anu hadé ngeunaan kumaha jalan Great Circles.
Formula Haversine
Jarak ngagunakeun lengkungan Bumi dilebetkeun kana Rumus haversine, anu ngagunakeun trigonometri pikeun ngamungkinkeun kurva bumi. Nalika anjeun mendakan jarak antara 2 tempat di bumi (nalika manuk gagak ngapung), garis lempeng leres-leres busur.
Ieu lumaku pikeun hiber udara - naha anjeun kantos ningali peta penerbangan anu saleresna sareng perhatoskeun aranjeunna dilebet? Éta sabab langkung pondok pikeun ngapung dina lengkungan antara dua titik tibatan langsung ka lokasi.
PHP: Ngitung Jarak Antara 2 Titik Lintang sareng Bujur
Ieu rumus PHP pikeun ngitung jarak antara dua titik (sareng konvérsi Mil vs Kilométer) dibuleurkeun kana dua tempat perpuluhan.
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));
}
Variabelna nyaéta:
- $Lintang1 – variabel pikeun lintang lokasi munggaran anjeun.
- $Bujur1 – variabel pikeun bujur lokasi munggaran anjeun
- $Lintang2 – variabel pikeun lintang lokasi kadua anjeun.
- $Bujur2 – variabel pikeun bujur lokasi kadua anjeun.
- $unit - mahluk standar mil. Ieu bisa diropéa atawa diliwatan salaku kilométer.
Python: Ngitung Jarak Antara 2 Titik Lintang sareng Bujur
Atoh, ieu rumus Python pikeun ngitung jarak antara dua titik (sareng konvérsi Mil vs Kilométer) dibuleurkeun kana dua tempat perpuluhan. Kiridit ka putra abdi, Bill Karr anu mangrupa Data Scientist pikeun OpenINSIGHTS, pikeun 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)
Variabelna nyaéta:
- lintang1 – variabel pikeun lokasi munggaran anjeun lintang.
- bujur1 – variabel pikeun lokasi munggaran anjeun bujur
- lintang2 - variabel pikeun lokasi kadua anjeun lintang.
- bujur2 - variabel pikeun lokasi kadua anjeun bujur.
- kamanunggalan - mahluk standar mil. Ieu bisa diropéa atawa diliwatan salaku kilométer.
MySQL: Meunangkeun Sadaya Rékor Dina Kisaran Ku Ngitung Jarak Dina Miles Nganggo Lintang sareng Bujur
Éta ogé dimungkinkeun pikeun nganggo SQL pikeun ngalakukeun itungan pikeun mendakan sadaya rékaman dina jarak anu khusus. Dina conto ieu, kuring badé milarian MyTable dina MySQL pikeun mendakan sadaya catetan anu kirang ti atanapi sami sareng variabel $ jarak (dina Mil) ka lokasi kuring di $ lintang sareng $ bujur:
Pamundut pikeun kéngingkeun sadaya catetan dina spésifik jarak ku ngitung jarak di mil antara dua titik lintang sareng bujur nyaéta:
$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."
Anjeun kedah ngaropea ieu:
- $ bujur - ieu mangrupikeun variabel PHP dimana kuring ngalirkeun bujur titik éta.
- $ lintang - ieu mangrupikeun variabel PHP dimana kuring ngalirkeun bujur titik éta.
- $ jarak - ieu jarak anu anjeun badé mendakan sadaya rékor kirang atanapi sami.
- meja - ieu tabel ... anjeun bakal hoyong ngagentos éta kalayan nami méja anjeun.
- lintang - ieu bidang lintang anjeun.
- bujur - ieu bidang bujur anjeun.
MySQL: Meunangkeun Sadaya Rékor Dina Rentang Ku Ngitung Jarak Dina Kilométer Ngagunakeun Lintang sareng Bujur
Sareng ieu pamundut SQL nganggo kilométer dina 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."
Anjeun kedah ngaropea ieu:
- $ bujur - ieu mangrupikeun variabel PHP dimana kuring ngalirkeun bujur titik éta.
- $ lintang - ieu mangrupikeun variabel PHP dimana kuring ngalirkeun bujur titik éta.
- $ jarak - ieu jarak anu anjeun badé mendakan sadaya rékor kirang atanapi sami.
- meja - ieu tabel ... anjeun bakal hoyong ngagentos éta kalayan nami méja anjeun.
- lintang - ieu bidang lintang anjeun.
- bujur - ieu bidang bujur anjeun.
Kuring ngamangpaatkeun kode ieu dina platform pemetaan perusahaan anu urang garapan pikeun toko ritel anu gaduh langkung ti 1,000 lokasi di Amérika Kalér sareng tiasa dianggo saé.
Microsoft SQL Server Jarak Geografis: STDistance
Upami anjeun nganggo Microsoft SQL Server, aranjeunna nawiskeun fungsina sorangan, Jarak ST pikeun ngitung jarak antara dua titik ngagunakeun tipe data Géografi.
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);
Hat tip ka Manash Sahoo, VP jeung Arsiték tina Highbridge.
Hatur nuhun pisan pikeun babagi. Ieu mangrupikeun salinan sareng témpél anu gampang sareng tiasa dianggo saé. Anjeun parantos nyalametkeun kuring seueur waktos.
FYI pikeun saha waé anu porting ka C:
ganda deg2rad (ganda deg) {balik deg * (3.14159265358979323846 / 180.0); }
Pohara nice sapotong posting - digawé pisan nice - Kuring ngan kungsi ngaganti ngaran tabel nyekel lat-panjang. Gawéna geulis gancang mun .. Kuring boga jumlah alesan leutik lat-longs (<400) tapi Jigana ieu bakal skala nicely. Situs anu saé ogé - kuring nembé nambihan kana akun del.icio.us kuring sareng bakal parios deui rutin.
Hatur nuhun pisan Peter sareng Kerry! Upami anjeun resep damel dina proyék GIS, kuring nyarankeun:
Hatur nuhun pisan… 😀
Kuring searched sakabeh poé keur itungan jarak jeung kapanggih algoritma harversine, hatur nuhun pikeun masihan conto kumaha carana nempatkeun eta dina pernyataan SQL. Hatur nuhun sareng salam, Daniel
Bungah ngabantosan, réréncangan rél!
Ayeuna kuring milarian fungsi PHP 'dina Polygon' anu bakal nyandak sajumlah koordinat lintang sareng bujur anu diurutkeun sareng terang upami titik sanés aya dina atanapi di luar poligon.
Abdi mendakan persamaan pikeun manggihan lamun hiji titik dina polygon a!
Kuring pikir SQL anjeun peryogi pernyataan anu gaduh.
tinimbang WHERE jarak <= $ jarak anjeun bisa jadi kudu
ngagunakeun HAVING jarak <= $jarak
disebutkeun hatur nuhun pikeun ngahemat kuring kebat waktu jeung tanaga.
Hai David,
Upami anjeun ngalakukeun naon waé jinis pernyataan GROUP BY, anjeun peryogi HAVING. Kuring henteu ngalakukeun éta dina conto di luhur.
Doug
Salaku MySQL 5.x, Anjeun teu bisa make landian dina klausa WHERE tingali http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html
Anggo HAVING tinimbang WHERE dina patarosan di luhur
Hatur nuhun pisan. Anjeun parantos ngalaksanakeun padamelan anu saé Éta mangrupikeun hal anu kuring hoyongkeun. Hatur nuhun pisan.
Hatur nuhun pisan pikeun babagi kode ieu. Éta nyalametkeun kuring seueur waktos pangwangunan. Ogé, hatur nuhun ka pamiarsa anjeun nunjukkeun yén pernyataan HAVING dipikabutuh pikeun MySQL 5.x. pohara mantuan.
Abdi bagja gaduh pamiarsa anu langkung pinter tibatan kuring!
🙂
Rumus di luhur ngahemat waktos kuring. Hatur nuhun pisan.
Kuring ogé kedah ngalih antara format NMEA sareng Derajat. Kuring mendakan rumus dina URL ieu di handapeun halaman. http://www.errorforum.com/knowledge-base/16273-converting-nmea-sentence-latitude-longitude-decimal-degrees.html
Dupi saha terang kumaha pariksa ieu?
Hatur nuhun!
Harry
Halo,
Patarosan sejen. Naha aya rumus pikeun senar NMEA sapertos di handap?
1342.7500,N,10052.2287,E
$GPRMC,032731.000,A,1342.7500,N,10052.2287,E,0.40,106.01,101106,,*0B
Hatur nuhun,
Harry
Kuring ogé mendakan yén WHERE henteu dianggo pikeun kuring. Dirobih janten HAVING sareng sadayana jalan sampurna. Mimitina kuring henteu maca koméntar sareng nyerat deui nganggo pilihan nested. Duanana bakal dianggo ngan rupa.
Hatur nuhun pisan mouch pikeun naskah anu ditulis dina mysql, ngan kedah ngadamel sababaraha panyesuaian minor (NGADU) 🙂
Gret pakasaban
Incredibly mantuan, hatur nuhun pisan! Kuring ngalaman sababaraha masalah jeung anyar "NGAGAH", tinimbang "WHERE", tapi sakali kuring maca komentar di dieu (sanggeus ngeunaan satengah jam grinding huntu kuring di hanjelu = P), Kuring meunang gawéna nicely. Hatur nuhun ^_^
hatur nuhun pisan karya hébat
Émut yén pernyataan anu dipilih sapertos kitu bakal parah pisan sacara komputasi sahingga laun. Upami anjeun gaduh seueur patarosan éta, éta tiasa ngagentos hal-hal anu gancang.
Hiji pendekatan teuing kirang sengit nyaéta ngajalankeun hiji munggaran (kasar) pilih maké aréa pasagi diartikeun ku jarak diitung ie "pilih * tina tablename dimana lintang antara lat1 na lat2 sarta bujur antara lon1 na lon2". lat1 = targetlatitude - latdiff, lat2 = targetlatitude + latdiff, sarupa jeung lon. latdiff ~= jarak / 111 (pikeun km), atawa jarak/69 pikeun mil saprak 1 darajat lintang nyaéta ~ 111 km (variasi saeutik saprak bumi rada oval, tapi cukup keur kaperluan ieu). londiff = jarak / (abs (cos (deg2rad (lintang))) * 111)) - atawa 69 pikeun mil (anjeun sabenerna bisa nyandak kuadrat rada gedé guna akun variasi). Teras cokot hasil tina éta sareng tuang kana pilihan radial. Ngan tong hilap ngitung koordinat luar-wates - nyaéta kisaran bujur anu ditampi nyaéta -180 dugi ka +180 sareng rentang lintang anu tiasa ditampi nyaéta -90 dugi ka +90 - upami latdiff atanapi londiff anjeun ngajalankeun di luar rentang ieu. . Catet yén dina kalolobaan kasus ieu bisa jadi teu lumaku sabab ukur mangaruhan itungan ngaliwatan garis ngaliwatan Samudra Pasifik ti kutub ka kutub, sanajan teu motong bagian tina chukotka sarta bagian tina Alaska.
Anu kami laksanakeun ku ieu mangrupikeun pangurangan anu signifikan dina jumlah poin anu anjeun lakukeun itungan ieu. Upami Anjeun gaduh sajuta titik global dina database disebarkeun kasarna merata tur Anjeun hoyong milarian dina 100 km, lajeng mimiti Anjeun (gancang) pilarian nyaeta wewengkon 10000 km sq jeung meureun bakal ngahasilkeun kira 20 hasil (dumasar kana distribusi rata leuwih hiji. aréa permukaan ngeunaan 500M sq km), nu hartina anjeun ngajalankeun itungan jarak kompléks 20 kali pikeun query ieu tinimbang sajuta kali.
Kasalahan leutik dina conto… éta bakal aya dina jarak 50 km (sanés 100) sabab urang ningali "radius" alun-alun urang.
Naséhat hebat! Kuring saleresna damel sareng pamekar anu nyerat fungsi anu narik alun-alun jero teras fungsi rekursif anu ngajantenkeun 'kuadrat' sakitar perimeter kalebet sareng ngaluarkeun titik sésana. Hasilna mangrupa hasil incredibly gancang - anjeunna bisa evaluate jutaan titik dina microseconds.
Pendekatan kuring di luhur pasti 'kasar' tapi mampuh. Nuhun sakali deui!
Doug,
Kuring geus nyobian nganggo MySQL na php mun evaluate naha titik lat lila aya dina polygon a. Naha anjeun terang upami réncang pamekar anjeun nyebarkeun conto kumaha cara ngalaksanakeun tugas ieu. Atanapi anjeun terang conto anu saé. Nuhun sateuacanna.
Hai sadayana ieu mangrupikeun pernyataan SQL uji kuring:
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
sareng Mysql nyarioskeun ka kuring jarak éta, henteu aya salaku kolom, abdi tiasa nganggo pesenan ku, abdi tiasa ngalakukeunana tanpa WHERE, sareng tiasa dianggo, tapi henteu sareng éta ...
Ngaganti "WHERE distance" ku "HAVING distance".
Gawéna kawas pesona, hatur nuhun, Douglas!
Ieu hébat, tapi éta sagampil manuk ngapung. Eta bakal gede pikeun nyobaan jeung ngasupkeun google maps API ka ieu kumaha bae (meureun make jalan jeung sajabana) Ngan pikeun méré ide ngagunakeun bentuk béda transportasi. Kuring masih boga acan nyieun fungsi annealing simulated dina PHP anu bakal tiasa nawiskeun solusi efisien keur masalah salesman iinditan. Tapi kuring nyangka yén kuring tiasa nganggo deui sababaraha kode anjeun pikeun ngalakukeunana.
Hi Douglas,
hatur nuhun pisan pikeun artikel ieu - anjeun ngan nyalametkeun kuring loba waktu.
ati-ati,
nimrod @Israel
artikel alus! Kuring mendakan seueur tulisan anu ngajelaskeun kumaha carana ngitung jarak antara dua titik tapi kuring leres-leres milarian snippet SQL.
Hatur nuhun pisan gawéna alus
Hatur nuhun pisan pikeun rumus ieu. Ieu dicukur sababaraha waktos dina proyék lokasi toko nu keur dahar di kuring.
Nuhun bundle. Ieu garis saeutik kode disimpen kuring sababaraha waktos considerable dina proyék lokasi toko!
#1054 – Kolom 'jarak' teu dipikanyaho dina 'klausa mana'
satuju
Sami di dieu! Naon masalahna :-/? kumaha carana ngajawab "jarak" - masalah Kolom? Tulungan kami, mangga!! 🙂
Coba nganggo HAVING tibatan WHERE
2 dinten panalungtikan pikeun tungtungna mendakan halaman ieu anu ngarengsekeun masalah kuring. Sigana mah kuring leuwih hadé bust kaluar WolframAlpha kuring jeung sikat up on maths abdi. Parobihan ti WHERE ka HAVING gaduh naskah kuring dina urutan kerja. HATUR NUHUN
tinimbang WHERE klausa ngagunakeun:
jarak <50
Hatur nuhun Georgi. Kuring terus meunang kolom 'jarak' teu kapanggih. Sakali kuring ngarobih WHERE ka HAVING éta damel sapertos pesona!
Abdi ngarepkeun ieu halaman munggaran anu kuring mendakan dina ieu. Saatos nyobian seueur paréntah anu béda ieu ngan ukur tiasa dianggo leres, sareng kalayan perobahan minimal anu diperyogikeun pikeun nyocogkeun database kuring sorangan.
Hatur nuhun pisan!
Abdi ngarepkeun ieu halaman munggaran anu kuring mendakan dina ieu. Saatos nyobian seueur paréntah anu béda ieu ngan ukur tiasa dianggo leres, sareng kalayan perobahan minimal anu diperyogikeun pikeun nyocogkeun database kuring sorangan.
Hatur nuhun pisan!
Hatur nuhun pisan!
Hatur nuhun pisan!
Ku teu sangka kodeu geus muncul deui. Meureun éta firefox?
Kuring nembé nguji duanana dina Firefox sareng Chrome sareng éta muncul. Cobian deui?
Hai. Hatur nuhun pisan. Ieu jalan kawas pesona a.
Hatur nuhun pisan Douglas. Ieu jalan sampurna.
Kuring terang rumus ieu tiasa dianggo, tapi kuring henteu tiasa ningali dimana radius bumi dipertimbangkeun. Punten aya anu tiasa ngajelaskeun kuring?
Tim, pikeun katerangan lengkep ngeunaan rumus Haversine (éta sanés kode), pariksa artikel Wikipedia: http://en.wikipedia.org/wiki/Haversine_formula
Geulis! Ieu geus mantuan kuring immensely!
Barang hébat Douglas. Dupi anjeun nyobian meunang titik simpang dibere Long / Lat / Bearing dua titik?
Henteu acan ngalakukeun éta, Khanh!
Hatur nuhun Douglas, Query SQL mangrupikeun naon anu kuring peryogikeun, sareng panginten kuring kedah nyerat nyalira. Anjeun parantos nyalametkeun kuring tina kamungkinan jam kurva diajar bujur lintang!
Kuring tetep meunang Errormessage: kolom kanyahoan 'Jarak' dina 'mana klausa' dina MySQL Query.
Peter, mangga baca ngaliwatan komentar séjén. Nembongan yén sababaraha urang kedah nganggo sintaksis anu béda pikeun WHERE / HAVING.
Hatur nuhun pikeun artikel hébat ieu! Ngan dites kode dina DB kuring jeung digawé hébat!
Douglas, hatur nuhun pikeun kode endah ieu. Geus cracking sirah kuring ngeunaan cara ngalakukeun ieu dina portal komunitas GPS kuring. Anjeun geus nyalametkeun kuring jam.
Hébat ngadangu, Ash!
hatur nuhun pikeun ngeposkeun tulisan anu mangpaat ieu,
tapi pikeun sababaraha alesan Abdi hoyong nanya
kumaha carana meunang jarak antara coords jero mysql db na coords diselapkeun ka php ku pamaké?
pikeun leuwih jelas ngajelaskeun:
1.pamaké kudu nyelapkeun [id] pikeun milih data nu tangtu tina db jeung koordinat pamaké sorangan
2.file php meunangkeun data target (koord) ngagunakeun [id] terus ngitung jarak antara pamaké jeung titik target.
atawa ngan saukur bisa meunang jarak ti kode di handap?
$qry = “PILIH *,(((acos(sin((“.$latitude.”.”*pi()/180)) * sin((`Latitude`*pi()/180))+cos((“. $lintang.”*pi()/180)) * cos((`Lintang`*pi()/180)) * cos(((“.$bujur.”- `Bujur`)*pi()/180) )))*180/pi())*60*1.1515*1.609344) salaku jarak TI `MyTable` WHERE jarak >= ".$jarak." >>>>tiasa "ngaluarkeun" jarak ti dieu?
nuhun sakali deui,
Timmy S
teu kapikiran, Kuring geus angka kaluar kumaha "fungsi" jalan dina php
$dis=getDistanceBetweenPointsNew($userLati, $userLongi, $lati, $longi, $unit = 'Km')
hatur nuhun pisan!!
ok, sagalana Kuring geus diusahakeun teu jalan. Maksud kuring, naon anu kuring gaduh damel, tapi jarakna jauh.
Naha aya anu tiasa ningali naon anu salah dina kode ieu?
lamun (isset ($ _POST [ 'dikintunkeun'])) {$ z = $ _POST [ 'kode pos']; $r = $_POST['radius']; echo "Hasil pikeun ".$z; $sql = mysql_query("PILIH DISTINCT m.zipcode, m.MktName,m.LocAddSt,m.LocAddCity,m.LocAddState,m.x1,m.y1,m.verified,z1.lat,z2.lon,z1. kota, z1.state FROM mrk m, pos z1, pos z2 WHERE m.zipcode = z1.zipcode AND z2.zipcode = $ z AND (3963 * acos ( truncate ( dosa ( z2.lat / 57.2958 ) * dosa ( 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 ") atawa maot (mysql_error()); sedengkeun ($baris = mysql_fetch_array ($sql)) {$store1 = $baris['MktName'].""; $toko = $baris['LocAddSt'].””; $store .= $row['LocAddCity'].", ".$row['LocAddState']." “.$row['kode pos']; $latitude1 = $baris['lat']; $bujur1 = $baris['lon']; $latitude2 = $baris['y1']; $bujur2 = $baris['x1']; $Kota = $baris['Kota']; $kaayaan = $baris[ 'kaayaan']; $dis = getnew($latitude1, $bujur1, $latitude2, $bujur2, $unit = 'Mi'); // $dis = jarak ($lat1, $lon1, $lat2, $lon2); $diverifikasi = $baris['diverifikasi']; lamun ($ diverifikasi == '1'){ gema ""; echo "".$toko.""; echo $dis . "mil (s) jauh"; gema ""; } Sejenna { echo "".$toko.""; echo $dis . "mil (s) jauh"; gema ""; } }}
kode functions.php kuring
fungsi getnew ($ lintang1, $ bujur1, $ lintang2, $ bujur2, $ unit = 'Mi') {$ theta = $ bujur1 - $ bujur2; $jarak = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)) ); $jarak = acos($jarak); $jarak = rad2deg($jarak); $ jarak = $ jarak * 60 * 1.1515; switch ($ unit) { bisi 'Mi': putus; bisi 'Km': $jarak = $jarak * 1.609344; } balik (buleud ($ jarak, 2)); }
hatur nuhun sateuacana
Hatur nuhun pikeun artikel ieu. Gawéna saé sareng kode kuring. 🙂
Hei Douglas, artikel hébat. Kuring mendakan katerangan anjeun ngeunaan konsép géografis sareng kodeu anu pikaresepeun pisan. Hijina saran abdi bakal spasi tur indent kode pikeun tampilan (kawas Stackoverflow, contona). Kuring ngarti yén anjeun hoyong ngahemat rohangan, tapi jarak kode konvensional / indentation bakal ngagampangkeun kuring, salaku programer, maca sareng ngabedah. Atoh, éta hal leutik. Tetep nepi karya hébat.
hatur nuhun! Abdi parantos ngarobih sakedik postingan… tapi persamaan nyandak seueur rohangan sareng panjang pisan dugi ka kuring henteu yakin yén éta ngabantosan teuing.
Hatur nuhun pisan.
di dieu bari maké jeung fungsi urang meunang hiji tipe jarak..bari maké query na datang tipe séjén jarak
Abdi moal ngitung jarak antara dua kaayaan
Muchas gracias por tan hermoso codigo…
Thisd i fungsi cosinus alus. Abdi henteu terang matematika, tapi hatur nuhun!
Karya anu saé… 🙂 (y)
sigana langkung gancang (mysql 5.9) nganggo dua kali rumus dina pilih sareng dimana:
$formula = "(((acos(sin((".$latitude."*pi()/180)) * sin((`Latitude`*pi()/180))+cos((".$latitude. ”*pi()/180)) * cos((`Lintang`*pi()/180)) * cos(((“.$bujur.”- `Bujur`)*pi()/180)))) *180/pi())*60*1.1515*1.609344)”;
$sql = 'PILIH *, '.$rumus.' sakumaha jarak ti méja WHERE '..$formula.' <= '.$jarak;
hatur nuhun…
teu bisa dipake lamun
"Jarak mana"
digawé lamun
"JAGA jarak"
Hatur nuhun pisan pikeun ngaguar tulisan ieu. Éta mangpaat pisan.
PHP mimitina dijieun salaku platform scripting basajan disebut "Personal Home Page". Kiwari PHP (singketan pikeun Hypertext Preprocessor) mangrupikeun alternatip tina téknologi Microsoft Active Server Pages (ASP).
PHP mangrupikeun basa sisi server open source anu dianggo pikeun nyiptakeun halaman wéb dinamis. Éta tiasa dilebetkeun kana HTML. PHP biasana dianggo babarengan sareng pangkalan data MySQL dina pangladén wéb Linux/UNIX. Ieu meureun basa scripting pang populerna.
Kuring mendakan solusi di luhur henteu jalan leres.
Abdi kedah ngalih ka:
$qqq = “PILIH *,(((acos(sin((“.$latitude.”.”*pi()/180)) * sin((`latt`*pi()/180))+cos((” . $latitude . "*pi()/180)) * cos((`latt`*pi()/180)) * cos(((" . $bujur . "- `longt`)*pi()/180) )))*180/pi())*60*1.1515) salaku jarak TI `register` “;
Nuhun Kupendra!
hatur nuhun Pak wroking sampurna .. tapi abdi gaduh hiji patarosan lamun abdi hoyong kaluaran tanpa titik decimal lajeng naon anu bisa kuring pigawé ..?
Nuhun sateuacanna.
Halo, punten abdi bakal peryogi bantosan anjeun dina ieu.
Kuring nyieun pamundut meunang ka web-server kuring http://localhost:8000/users/findusers/53.47792/-2.23389/20/
53.47792 = $ lintang
-2.23389 = $ bujur
jeung 20 = jarak kuring rék nimba
Nanging nganggo rumus anjeun, éta nyandak sadaya baris dina db kuring
$hasil = DB::select(DB::raw("PILIH *,(((acos(sin((".$latitude."."))/180)) * sin((lat*pi()/180 ))+cos((“.$latitude.”*pi()/180)) * cos((lat*pi()/180)) * cos(((“.$bujur.”- lng)*pi( ) / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) salaku jarak TI spidol NGABODOH jarak > = ". $ jarak ));
[{"id":1,"ngaran":"Frankie Johnnie & Luigo Teuing","alamat":"939 W El Camino Real, Mountain View, CA","lat":37.386337280273,"lng":-122.08582305908, ”jarak”:16079.294719663},{“id”:2,”ngaran”:”Amici's East Coast Pizzeria”,”alamat”:”790 Castro St, Mountain View, CA”,”lat”:37.387138366699,”lng”: -122.08323669434, "jarak": 16079.175940152}, {"id": 3, "ngaran": "Kapp urang Pizza Bar & grill","Alamat": "191 Castro St, Mountain View, CA","lat": 37.393886566162, "lng": -122.07891845703, "jarak": 16078.381373826}, {"id": 4, "ngaran": "Round Table Pizza: Mountain View","Alamat": "570 N Shoreline Blvd, Mountain View, CA", ”lat”:37.402652740479,”lng”:-122.07935333252,”jarak”:16077.420540582},{“id”:5,”ngaran”:”Tony & Alba's Pizza & Pasta”,”alamat”:”619 Escuela Ave. View, CA”,”lat”:37.394012451172,”lng”:-122.09552764893,”jarak”:16078.563225154},{“id”:6,”ngaran”:”Oregano's Wood-Fired Pizza”,”alamat”:”4546 El Camino Real, Los Altos, CA ","lat": 37.401725769043, "lng": -122.11464691162, "jarak": 16077.937560795}, {" id": 7, "ngaran": "The bar jeung grills","Alamat": "24 Whiteley Street, Manchester","lat": 53.485118865967, "lng": -2.1828699111938, "jarak": 8038.7620112314}]
Abdi hoyong nyandak ngan baris kalayan 20 mil tapi brings sadayana barisan. Punten naon anu kuring lakukeun salah
Abdi milarian pamundut anu sami tapi rada ningkat - pondokna ieu nyaéta pikeun ngagolongkeun sadaya koordinat dina jarak 2 mil unggal koordinat teras ngitung sabaraha koordinat dina unggal grup sareng kaluaran ngan hiji grup anu gaduh koordinat paling seueur - sanaos upami Anjeun gaduh leuwih ti hiji grup diantara grup nu boga paling jumlah koordinat - saukur kaluaran grup acak tina grup kalawan jumlah pangbadagna sarua -