Bishan waxaan waxoogaa barnaamij ah ka diyaarinayay PHP iyo MySQL marka loo eego GIS. Ku dhex foorarsiga shabaqa, runtii waxaan ku adkaaday inaan helo qaar ka mid ah Xisaabinta juqraafiyeed si aan u helo masaafada udhaxeysa laba goobood sidaa darteed waxaan rabay inaan halkaan ku wadaago.
Habka ugu fudud ee loo xisaabiyo masaafada udhaxeysa labada dhibcood ayaa ah iyadoo la adeegsanayo qaaciddada 'Pythagorean formula' si loo xisaabiyo 'hypotenuse of triangle' (A² + B² = C²). Tan waxaa loo yaqaan Masaafada Euclidean.
Taasi waa bilow xiiso leh laakiin kuma khusayso Juqraafiga maaddaama masaafada u dhexeysa xarriimaha loolka iyo Longitude ay yihiin masaafo siman maaha marka laga reebo. Markaad u soo dhowaato dhulbaraha, Khadadka loolka ayaa sii kala fogaanaya. Haddii aad isticmaasho nooc ka mid ah isla'egta saddex-geesoodka ah ee fudud, waxay ku qiyaasi kartaa masaafada si sax ah hal meel oo si xunna ugu qaldan meesha kale, sababtoo ah qallooca dhulka.
Masaafo Weyn
Wadooyinka loo maro masaafada dheer ee dhulka waxaa loo yaqaan Masaafo Weyn. Taasi waa… masaafada ugu gaaban ee u dhaxaysa labada dhibcood ee goobtu way ka duwan tahay dhibcaha ku yaal khariidad fidsan. Ku dar taas iyada oo xaqiiqda ah in loolka iyo xargaha dhaadheer aysan isku mid ahayn… oo aad heshay xisaab adag.
Waa tan sharaxaad muuqaal fiidiyoow ah oo ku saabsan sida Wareegyada Weyn u shaqeeyaan.
Qaaciddada Haversine
Fogaanta isticmaasha qalooca Dunida waxaa lagu daray Foornada Haversine, kaas oo adeegsada trigonometry si loogu oggolaado leexashada dhulka. Markaad raadineyso masaafada udhaxeysa 2 meelood oo dhulka ah (sida diiqu u duulo), qadka toosan ayaa runtii ah qaanso.
Tani waxay khuseysaa duulimaadka hawada - weligaa ma fiirisay khariiddada dhabta ah ee duulimaadyada oo ma aragtay inay qaansooyin yihiin? Taasi waa sababta oo ah way ka gaaban tahay in lagu duulo qaanso u dhexeysa laba dhibcood marka loo eego si toos ah goobta.
PHP: Xisaabi Masaafada udhaxeysa 2 Points oo ah Ludud iyo Longitude
Halkan waxaa ah qaacidada PHP ee lagu xisaabinayo masaafada u dhexeysa labada dhibcood (oo ay la socoto beddelka Mile vs. Kiiloomitir) oo lagu soo koobay laba jajab tobanle.
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));
}
Doorsoomayaasha waa:
- $Latitude1 - doorsoome loogu talagalay loolka meesha ugu horeysa.
- $Longitude1 - doorsoome u ah dhererka goobtaada koowaad
- $Latitude2 - doorsoome loogu talagalay loolka goobtaada labaad.
- $Longitude2 - doorsoome u ah dhererka goobtaada labaad.
- $unit - default ahaanshaha miles. Tan waxa loo cusboonaysiin karaa ama loo gudbin karaa sidii kiiloomitir.
Python: Xisaabi fogaanta u dhaxaysa 2 dhibcood ee Latitude iyo Longitude
Si kastaba ha ahaatee, waa kan qaacidada Python ee lagu xisaabinayo masaafada u dhaxaysa labada dhibcood (oo ay la socoto Mile vs. Kiiloomitir beddelashada) oo lagu soo koobay laba jajab tobanle. Mahad waxaa leh wiilkayga, Bill Karr oo u ah Saynisyahanka Xogta INSIGHTS, loogu talagalay koodka.
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)
Doorsoomayaasha waa:
- loolka 1 - doorsoome meesha ugu horeysa raxan.
- longitude1 - doorsoome meesha ugu horeysa dhaadheer
- loolka 2 - doorsoome goobtaada labaad raxan.
- longitude2 - doorsoome goobtaada labaad dhaadheer.
- unit - default ahaanshaha miles. Tan waxa loo cusboonaysiin karaa ama loo gudbin karaa sidii kiiloomitir.
MySQL: Soo Celinta Dhammaan Diiwaanada Dhexdooda Dhexyaala Iyadoo Xisaabinaysa Fogaanta Mayliyada Isticmaalka Latitude iyo Longitude
Waxa kale oo suurtagal ah in loo isticmaalo SQL si loo sameeyo xisaabinta si looga helo dhammaan diiwaanada masaafad gaar ah. Tusaalahan, waxaan ku weydiin doonaa MyTable-ka MySQL si aan u helo dhammaan diiwaanada ka yar ama u dhigma isbedelka $ masaafada (ee Miles) illaa meesha aan joogo ee $ latitude iyo $ Longitude:
Weydiinta dib u helida dhammaan diiwaanada si gaar ah masaafada adoo xisaabinaya masaafada u jirta labo mayl oo udhaxeysa iyo Longitude waa:
$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."
Waxaad u baahan doontaa inaad habeyso tan:
- $ Longitude - kani waa beddele PHP halka aan ku dhaafayo dhererka barta.
- $ loolka - kani waa beddele PHP halka aan ku dhaafayo dhererka barta.
- $ fog - tani waa masaafada aad jeclaan lahayd inaad ka hesho dhammaan diiwaanada wax ka yar ama u dhigma.
- miiska - kani waa miiska… waxaad u baahan doontaa inaad ku beddesho magacaaga miiska.
- raxan - kani waa berrinkii loolkaaga.
- dhaadheer - kani waa berrinka dherarkaaga.
MySQL: Soo Celinta Dhammaan Diiwaanada Dhexdooda Dhexyaala Iyada oo Xisaabinaysa Masaafada Kiiloo mitir Isticmaalka Latitude iyo Longitude
Waana tan SQL weydiinta iyadoo la adeegsanayo kiilomitir 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."
Waxaad u baahan doontaa inaad habeyso tan:
- $ Longitude - kani waa beddele PHP halka aan ku dhaafayo dhererka barta.
- $ loolka - kani waa beddele PHP halka aan ku dhaafayo dhererka barta.
- $ fog - tani waa masaafada aad jeclaan lahayd inaad ka hesho dhammaan diiwaanada wax ka yar ama u dhigma.
- miiska - kani waa miiska… waxaad u baahan doontaa inaad ku beddesho magacaaga miiska.
- raxan - kani waa berrinkii loolkaaga.
- dhaadheer - kani waa berrinka dherarkaaga.
Waxaan ku isticmaalay koodhkan meherad khariidad ganacsi oo aan u adeegsanay dukaan tafaariiq leh oo leh in kabadan 1,000 goobood oo kuyaala Waqooyiga Ameerika oo si qurux badan u shaqeeyay.
Masaafada Juqraafiyeed ee Microsoft SQL Server: STDistance
Haddii aad isticmaaleyso Microsoft SQL Server, waxay bixiyaan shaqadooda, STD-yada si loo xisaabiyo masaafada u dhaxaysa laba dhibcood iyadoo la adeegsanayo nooca xogta Juqraafiga.
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);
Tip koofiyadda ee Manash Sahoo, VP iyo Architect of Highbridge.
Aad baad ugu mahadsantahay wadaagistaada. Tani waxay ahayd nuqul fudud iyo shaqo dhejis ah oo si fiican u shaqeysa. Waqti badan ayaad keydisay.
FYI ee loogu talagalay qof kasta oo u dhoofaya C:
double deg2rad (deg deg double) {deg deg * (3.14159265358979323846 / 180.0); }
Qeyb aad u fiican oo dhajin ah - si fiican ayey u shaqeysay - Kaliya waxaan u baahanahay inaan beddelo magaca miiska haya lat-dheer. Waxay u shaqeysaa si dhakhso leh ilaa .. Waxaan haystaa tiro yar oo macquul ah oo lat-dheer ah (<400) laakiin waxaan u maleynayaa inay tani si wanaagsan u miisaami doonto. Goob fiican sidoo kale - hadda ayaan ku daray koontadayda del.icio.us oo si joogto ah ayaan u hubin doonaa.
Aad ayaad u mahadsantahay Peter iyo Kerry! Haddii aad jeceshahay inaad ka shaqeyso mashaariicda GIS, waxaan kugula talin lahaa:
Aad baad u mahadsantahay… 😀
Waxaan maalintii oo dhan ka raadiyay xisaabinta masaafada waxaanan ka helay algorithm-ka harversine, waad ku mahadsan tahay inaad siisay tusaalaha ku saabsan sida loo dhigo bayaan sql ah. Mahadsanid iyo salaan, Daanyeel
Farxad si ay u caawiso, biraha saaxiib!
Hadda waxaan raadinayaa 'in Polygon' PHP hawsheeda oo qaadan doonta iskuxir iskuxidh ah latitude iyo Longitude iskuna xiraya oo tilmaamaya haddii qodob kale kujiro ama ka baxsan geesoolaha.
Waan helay isle'eg si loo ogaado haddii dhibic geesoolayaasha!
Waxaan u maleynayaa in SQL-kaaga uu u baahan yahay bayaan.
halkii HALKII masaafada <= $ masaafada aad u baahan karto
isticmaal HAVING fogaanta <= $ masaafada
haddii kale waad ku mahadsan tahay inaad ii keydisay farabadan oo waqti iyo tamar ah.
Hi David,
Haddii aad samaynaysid nooc kasta oo GROUP BY bayaan ah, waxaad u baahan doontaa HAVING. Anigu taas kuma sameynayo tusaalaha kore.
Doug
Marka laga hadlayo MySQL 5.x, uma isticmaali kartid naanays halka ku xusan qodobka eeg http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html
Ku isticmaal HAVING halkii aad ka isticmaali lahayd HALKII su'aalaha kore
Aad ayaad u mahadsantahay. Shaqo fiican ayaad qabatay Taasi waa waxa aan dhab ahaan doonayo. Mahadsanid
Aad baad ugu mahadsantahay wadaagida lambarkan. Waxay iga badbaadisay waqti badan oo horumar ah. Sidoo kale, waad ku mahadsan tahay akhristayaashaada inaad tilmaamtay in bayaan HAVING ay lagama maarmaan u tahay MySQL 5.x. Aad waxtar u leh.
Waxaan ku faraxsanahay in akhristayaashu ay iga caqli badan yihiin aniga!
🙂
Qaaciddada kor ku xusan ayaa waqti badan ii haysa. Aad ayaad u mahadsantahay.
Sidoo kale waa inaan u kala beddelaa qaabka NMEA iyo Darajooyinka. Waxaan kahelay qaaciido URLkan hoosta bogga. http://www.errorforum.com/knowledge-base/16273-converting-nmea-sentence-latitude-longitude-decimal-degrees.html
Ma jiraa qof garanaya sida loo xaqiijiyo tan?
Mahadsanid!
Harry
Hello,
Su’aal kale. Ma jiraa qaacido loogu talagalay xargaha NMEA sida kan hoose?
1342.7500, N, 10052.2287, E
$GPRMC,032731.000,A,1342.7500,N,10052.2287,E,0.40,106.01,101106,,*0B
Thanks,
Harry
Waxa kale oo aan ogaaday in HALKII aanu ii shaqaynayn. Waxaa loogu badalay HAVING wax walbana sifiican ayey ku shaqeeyaan. Marka hore ma aanan aqrinin faallooyinka oo dib ayaan u qoray iyada oo la adeegsanayo xulashada buulka. Labaduba si fiican ayey u shaqeyn doonaan.
Aad baad ugu mahadsan tihiin qoraalka ku qoran mysql, kaliya waxay ahayd inuu sameeyo wax ka bedel yar (HAVING) 🙂
Shaqo murugo leh
Si wax ku ool ah waxtar leh, aad baad u mahadsan tahay! Waxaan la kulmay dhibaatooyin qaar ka mid ah "HAVING" cusub, halkii aan ka dhihi lahaa "WHERE", laakiin markii aan akhriyo faallooyinka halkan (ka dib nus saac markii aan ilkahayga u ciqaabayay jahwareerka = P), waxaan u helay inay si fiican u shaqeyso. Mahadsanid ^ _ ^
mahadsanidiin wax badan ayaa shaqeeya
Maskaxda ku hay in bayaanka xulashada ah ee noocaas ahi uu noqon doono mid aad u xisaabis badan oo sidaas darteed gaabis ah. Haddii aad hayso waxbadan oo ka mid ah weydiimahaas, waxay si dhakhso leh wax uga qaban kartaa waxyaabaha.
Qaab aad uxun oo aad uxun ayaa ah in laxulo xulashada ugu horeysa (ceyriin) iyadoo la adeegsanayo aag SQUARE ah oo lagu qeexay masaafad xisaabeed sida "xulo * laga bilaabo magaca tablenamee halka uu dhigayo inta udhaxeysa lat1 iyo lat2 iyo Longitude inta udhaxeysa lon1 iyo lon2". lat1 = bartilmaameedka - latdiff, lat2 = bartilmaameedka + latdiff, oo la mid ah lon. latdiff ~ = masaafada / 111 (kiiloomitir), ama masaafo / 69 mayl tan iyo 1 darajo oo buurta waa ~ 111 km (kala duwanaansho yar maadaama dhulku xoogaa yaryahay, laakiin kufilan ujeedkan). londiff = masaafada / (abs (cos (deg2rad (latitude)) * 111)) - ama 69 kiiloomitir (runti waad qaadan kartaa afargees waxyar ka weyn si aad ugula xisaabtantid kala duwanaanshaha). Ka dib qaado natiijada taas oo ku quudi xulashada radial. Kaliya ha ilaawin inaad ku xisaabtanto iskudhafyada ka baxsan xuduudaha - yacni inta udhaxeysa loolka la aqbali karo waa -180 ilaa +180 iyo baaxadda laolka la aqbali karo waa -90 ilaa + 90 - haddii ay dhacdo in latdiff-kaaga ama ciddiffadaadu ay ka baxsan tahay baaxadaas . Xusuusnow in kiisaska badankood tani aysan khusayn karin maxaa yeelay waxay kaliya saameyneysaa xisaabinta khadadka loo maro badweynta nabdoon ee laga soo bilaabo tiirka illaa tiirarka, in kasta oo ay goyso qeyb ka mid ah chukotka iyo qeyb ka mid ah alaska.
Waxa aan ku guuleysanay tan waa hoos u dhac weyn oo ku yimid tirada dhibcaha aad ka dhigeyso xisaabtan. Haddii aad haysato hal milyan oo dhibicood oo caalami ah oo ku jira xogta loo qaybiyey qiyaas ahaan si siman oo aad rabto inaad ka dhex raadiso 100 km, markaa raadintaada ugu horreysa (dhakhso leh) waa aag 10000 sq km ah waxayna u badan tahay inay ka dhasho natiijooyin 20 (oo ku saleysan xitaa qaybinta bedka dusha sare ee qiyaastii 500M sq km), oo macnaheedu yahay inaad socodsiiso xisaabinta masaafada qalafsan 20 jeer ee weydiintan halkii milyan jeer.
Khalad yar oo kujira tusaalaha… taasi waxay udhaxaysaa 50 km (maaha 100) maadama aan eegayno "radius" of our square.
Talo cajiib ah! Runtii waan la shaqeeyay horumariye kaas oo qoray hawl jiiday barxadda gudaha ka dibna hawl dib u soo celin ah oo ka dhigtay 'laba jibbaarane' hareeraha hareeraha si loogu daro oo looga saaro dhibcaha haray. Natiijadu waxay ahayd natiijo layaableh oo deg deg ah - wuxuu qiimeyn lahaa malaayiin dhibco oo ku jira microseconds
Habka aan kor ku xusan hubaal waa 'cayriin' laakiin karti leh. Mar labaad mahadsanid!
Doug,
Waxaan isku dayay inaan isticmaalo mysql iyo php si aan u qiimeeyo in barta dheer ee dheer ay ku dhex jirto geesoolayaasha. Ma ogtahay haddii saaxiibkaa horumariyaha ahi uu daabacay wax tusaalooyin ah oo ku saabsan sida loo dhammaystiro hawshan. Mase taqaanaa tusaalooyin fiican. Waad ku mahadsantahay horay.
Dhamaantiin waad salaaman tihiin tani waa tijaabadayda SQL-ka:
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
iyo Mysql wuxuu ii sheegayaa masaafadaas, oo aysan u jirin tiir ahaan, waxaan u adeegsan karaa amar ahaan, waan sameyn karaa la'aanteed HALKAN, wuuna shaqeeyaa, laakiin lama socdo…
Ku beddel "HALKEE fog" oo leh "HAVING fogaanta".
Waxay u shaqeysaa sida soojiidashada, mahadsanid, Douglas!
Tani way fiican tahay, hase yeeshe waa sida shimbiraha u duulaan. Way fiicnaan laheyd inaad isku daydo oo aad ku darto khariidadaha google-ka API si uun sidan ah (waxaa laga yaabaa inaad isticmaasho waddooyinka iwm.) Weli wali ma aanan sameynin shaashad isku-dhafan oo loo yaqaan 'PHP' taas oo awoodi doonta inay bixiso xal wax ku ool ah oo ku saabsan dhibaatada iibiyaha safarka ah. Laakiin waxaan u maleynayaa inaan awoodi karo inaan dib u isticmaalo qaar ka mid ah koodhkaaga si aan sidaas u yeelo.
Nabad Douglas,
Aad baad ugu mahadsantahay maqaalkan - waxaad igu badbaadisay waqti badan.
is ogow,
nimrod @Israa'iil
Maqaal wanaagsan! Waxaan helay maqaallo badan oo sharraxaya sida loo xisaabiyo masaafada u dhexeysa laba dhibic laakiin runtii waxaan raadinayay gabalka SQL.
Mahadsanidiin waxbadan ayaa wanaagsan oo wanaagsan
Aad baad ugu mahadsantahay qaacidadan. Waxay xiiray in muddo ah mashruuc goob bakhaar ku yaal oo aniga wax iga cunaya.
Mahadsanid xirmo. Khadkan yar ee koodhku wuxuu igu keydsaday waqti aan yarayn mashruuca goobta bakhaarka!
# 1054 - Safka aan la garanayn ee 'masaafada' gudaha 'halka faqradda'
aqbalaan
Isku mid halkan! Waa maxay dhibaatada: - /? sida loo xalliyo "masaafada" - Dhibaatada safka? Naga caawi, fadlan !! 🙂
Iskuday inaad isticmaasho HAVING halkii aad ka isticmaali lahayd WHERE
2 maalmood oo cilmi baaris ah si aan ugu dambeyntii u helo boggan xaliya dhibaatadayda. Waxay umuuqataa inaan sifiican ugafiicaayo WolframAlpha oo aan iskaga cadaynayo xisaabta. Isbeddelka WHERE ilaa HAVING wuxuu leeyahay qoraalkeyga oo shaqeynaya. MAHADSANID
halkii laga isticmaali lahaa WHERE faqradda:
Haysashada masaafada <50
Mahadsanid Georgi. Waxaan sii waday helitaanka safka 'masaafada' lama helin. Mar alla markii aan u beddelo HALKA aan ku yeelanayo waxay u shaqaysay sidii soo jiidasho!
Waxaan jeclaan lahaa in kani yahay boggii ugu horreeyay ee aan ka helo tan. Ka dib markii aan isku dayay amarro badan oo kala duwan tani waxay ahayd tan kaliya ee sida saxda ah u shaqeysa, iyo isbadalada ugu yar ee loo baahan yahay si loo waafajiyo keydkeyga.
Thanks badan!
Waxaan jeclaan lahaa in kani yahay boggii ugu horreeyay ee aan ka helo tan. Ka dib markii aan isku dayay amarro badan oo kala duwan tani waxay ahayd tan kaliya ee sida saxda ah u shaqeysa, iyo isbadalada ugu yar ee loo baahan yahay si loo waafajiyo keydkeyga.
Thanks badan!
Mahadsanid wax badan!
Mahadsanid wax badan!
Uma maleynayo in koodhku soo muuqanayo mar dambe. Malaha waa firefox?
Waxaan kaliya ku tijaabiyay Firefox iyo Chrome waana soo muuqanayaan. Mar kale isku day?
Salaan. Aad baad u mahadsantahay. Tani waxay u shaqeysaa sida soojiidashada.
Aad baad u mahadsantahay Douglas. Tani si fiican ayey u shaqeysaa.
Waan ogahay qaaciddadan inay shaqeyso, laakiin ma arki karo halka gacan ka hadalka dhulka lagu xisaabtamayo. Qofna ma ii iftiimin karaa, fadlan?
Tim, sharaxaad buuxda ee habka 'Haversine' (taasi maahan koodh), hubi maqaalka Wikipedia: http://en.wikipedia.org/wiki/Haversine_formula
Qurux badan! Tani si weyn ayey ii caawisay!
Waxyaabo waaweyn Douglas. Ma isku dayday inaad hesho barta isgoyska oo la siiyay Long / Lat / Haysashada laba dhibcood?
Wali ma sameyn taas, Khanh!
Waad ku mahadsan tahay Douglas, Su'aasha SQL waa sida saxda ah ee aan u baahnahay, waxaana moodayay inaan ku qoro naftayda. Waxaad iga badbaadisay suuro galnimada saacadaha qalooca barashada loolka!
Waan sii helaa khaladka: Khaanadda aan la garanayn ee 'Fogaanta' gudaha 'halka ay jumladda' ka dhigan tahay Su'aasha MySQL.
Peter, fadlan ka aqri faallooyinka kale. Waxay u muuqataa in dadka waawayn qaarkood ay ahayd inay adeegsadaan habeyn ka duwan WHERE / HAVING.
Waad ku mahadsan tahay maqaalkan weyn! Kaliya tijaabi lambarka DB-ga oo si fiican u shaqeeyey!
Douglas, waad ku mahadsan tahay koodhkan cajiibka ah. Waxaan madaxa ka jabiyay sida loo sameeyo tan boggeyga bulshada ee GPS. Waad keydisay saacado.
La maqlo weynaa, Ash!
waad ku mahadsan tahay dhajinta maqaalkan waxtar leh,
laakiin sababo jira awgood waxaan jeclaan lahaa inaan weydiiyo
sida loo helo masaafada udhaxeysa iskuxirka gudaha mysql db iyo iskudhafyada la galiyay php adeegsadaha?
si faahfaahsan u sharax:
1.user waa inuu geliyaa [id] xulashada xogta cayiman ee db iyo isku xirka isticmaalaha laftiisa
2. feylka php wuxuu helaa xogta bartilmaameedka (coords) adoo adeegsanaya [id] ka dibna xisaabiya masaafada udhaxeysa isticmaalaha iyo barta bartilmaameedka
ama si fudud uun buu uga fogaan karaa lambarka hoose?
$ qry = “Xulo *, ((acos (sin ((.. $ latitude.” * pi () / 180)) * sin ((`` Latitude` * pi () / 180)) + cos ((“. $ loolka. ”* pi () / 180)) * cos ((` `Latitude` * pi () / 180)) * cos (((". $ Longitude. "-` `Longitude`) * pi () / 180) ))) * * 180 / pi ()) * 60 * 1.1515 * 1.609344) sida masaafada uga socota 'MyTable` WHERE fogaanta> = ". $ Masaafada." >>>> Miyaan “ka bixin karaa” masaafada halkan ka socota?
mar labaad mahadsanid,
Timmy S
ha u maleynin, waxaan gartay sida “shaqadu” ugu shaqeyso php
$ dis = getDistanceBetweenPointsNew ($ userLati, $ userLongi, $ lati, $ longi, $ unit = 'Km')
aad baad u mahadsantahay !!
ok, wax kasta oo aan isku dayay ma shaqeynayaan. Waxaan ula jeedaa, waxa aan hayaa waa ay shaqeeyaan, laakiin masaafada waa ka fog yihiin.
Ma jiraa qof macquul ah inuu arko waxa ka khaldan xeerkaan?
haddii (isset ($ _ POST ['gudbiyey'])) {$ z = $ _POST ['zipcode']; $ r = $ _POST ['gacan']; ku celcelinta "Natiijooyinka". $ z; $ sql = mysql_query (“XUL XADDIIX m.zipcode, m.MktName, m.LocAddSt, m.LocAddCity, m.LocAddState, m.x1, m.y1, m.verified, z1.lat, z2.lon, z1. magaalada, z1.state FROM mrk m, zip z1, zip z2 WHERE m.zipcode = z1.zipcode IYO z2.zipcode = $ z AND (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 ") ama dhinta (mysql_error ()); halka ($ row = mysql_fetch_array ($ sql)) {$ store1 = $ row ['MktName']. ""; $ dukaan = $ saf ['LocAddSt']. ””; $ dukaanka. = $ saf ['LocAddCity']. ",". $ saf ['LocAddState']. ” $. Safka ['zipcode']; $ latitude1 = $ saf ['lat']; $ longitude1 = $ saf ['lon']; $ latitude2 = $ saf ['y1']; $ Longitude2 = $ saf ['x1']; $ magaalo = $ saf ['magaalo']; $ gobol = $ saf ['gobol']; $ dis = getnew ($ latitude1, $ Longitude1, $ latitude2, $ Longitude2, $ unit = 'Mi'); // $ dis = fogaanta ($ lat1, $ lon1, $ lat2, $ lon2); $ la xaqiijiyay = $ saf ['la xaqiijiyay']; haddii ($ la xaqiijiyey == '1') {echo “”; echo "". $ dukaanka. ""; echo $ dis. ”Mayl (yada) fog”; dhawaaqa ""; } kale {echo "". $ dukaanka. ""; echo $ dis. ”Mayl (yada) fog”; dhawaaqa ""; }}}
shaqadeyda.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)) ); $ fogaanta = acos ($ fogaanta); $ fogaanta = rad2deg ($ masaafo); $ fogaanta = $ fogaanta * 60 * 1.1515; biiro ($ unit) {kiiska 'Mi': jab; kiiska 'Km': $ masaafo = $ masaafo * 1.609344; } soo noqosho (wareeg ($ masaafada, 2)); }
Waad ku mahadsantahay horay
Waad ku mahadsantahay maqaalkan. Si fiican ugu shaqeynaya lambarkayga. 🙂
Hey Douglas, maqaal weyn. Waxaan ka helay sharraxaaddaada fikradaha juqraafi iyo koodhku runtii xiiso badan. Soo jeedintayda kaliya ayaa noqon doonta in la banneeyo oo la galiyo nambarka muujinta (sida Stackoverflow, tusaale ahaan). Waan fahamsanahay inaad rabto inaad keydiso booska, laakiin kala-goynta koodhadhka caadiga / indentation-ka ayaa wax badan iga fududayn doona, ka barnaamij-yaqaan ahaan, inaan wax akhriyo oo kala-baxo. Anyhow, taasi waa wax yar. Sii wad shaqada weyn.
Mahadsanid! Wax yar ayaan wax ka beddelay… laakiin isla'egyadu waxay qaadanayaan qol aad u badan oo way dheer yihiin oo aanan hubin inay wax badan caawiso
Aad baad u mahadsan tahay.
halkan inta aan la adeegsaneyno waxaan heleynaa hal nooc oo masaafo ah .. iyadoo la adeegsanayo weydiinta nuuca kale ee fog ee soo socda
Ma xisaabin masaafada u dhaxeysa laba gobol
Muchas gracias por tan hermoso codigo…
Tani waxay fiicantahay shaqooyinka cosinus. Ma aqaan xisaabta, laakiin mahadsanid!
Shaqo Weyn… 🙂 (y)
waxay umuuqataa mid dhakhso badan (mysql 5.9) in la isticmaalo laba jeer qaaciidada xulashada iyo meesha:
$ 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 = 'Xulo *,'. $ qaaciidada. ' sida fogaanta miiska HALKAN '.. $ formula.' <= '. $ masaafada;
mahadsanid
aan shaqeynin haddii
“HALKEE masaafo”
shaqeeya haddii
"Fogaan fog"
Aad baad ugu mahadsantahay xiirista maqaalkan. Waa mid waxtar badan.
PHP markii hore waxaa loo abuuray madal qoraal oo fudud oo loo yaqaan "Shakhsi Hoyga Guriga". Maalmahan PHP (oo loo soo gaabiyay Hypertext Preprocessor) waa beddel ka mid ah teknolojiyadda Microsoft ee Firfircoon ee Adeegyada (ASP).
PHP waa luuqad furan oo adeeg furan ah oo loo adeegsado abuurista bogag firfircoon. Waxaa lagu dhejin karaa HTML. PHP waxaa badanaa loo isticmaalaa iyadoo lala kaashanayo keydka MySQL ee Linux / UNIX serverka. Waxay u badan tahay inuu yahay luqadda qoraalka ugu caansan.
Waxaan kahelay xalka kor ku xusan inaan sifiican ushaqeyn.
Waxaan u baahanahay inaan u beddelo:
$ qqq = "Xulo *, ((acos (sin ((". $ latitude. * * pi () / 180)) * sin ((`` latt` * pi () / 180)) + cos ((".) $ loolka. “* pi () / 180)) * cos ((` `latt` * pi () / 180)) * cos (((". $ Longitude. "-` `longt`) * pi () / 180) ))) * * 180 / pi ()) * 60 * 1.1515) Masaafada laga bilaabo 'diiwaanka' ';
Mahadsanid Kupendra!
waad ku mahadsantahay mudane si qumman u luqluqashada .. laakiin waxaan hayaa hal su'aal haddii aan doonayo inaan soo saaro aniga oo aan lahayn dhibic tobanle markaa maxaan sameyn karaa ..?
Thanks ka hor.
Waad salaaman tahay, fadlan runtii waxaan u baahanahay caawimaadda tan.
Waxaan codsi ka helay shabakadeyda internetka http://localhost:8000/users/findusers/53.47792/-2.23389/20/
53.47792 = $ loolka
-2.23389 = $ Longitude
iyo 20 = masaafada aan rabo inaan kusoo qaato
Si kastaba ha noqotee adiga oo isticmaalaya foormulada, waxay soo ceshanaysaa dhammaan safafka dbkayga
$ natiijooyinka = DB :: xulo (DB :: ceeriin ("XUL, * ((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) sida masaafada uga timaadda calaamadaha HAWLAHA masaafada> = ". $ Masaafada));
[{"Id": 1, "name": "Frankie Johnnie & Luigo Too", "address": "939 W El Camino Real, Mountain View, CA", "lat": 37.386337280273, "lng": - 122.08582305908, ”Fogaanta”: 16079.294719663}, {“id”: 2, ”name”: ”Amici’s East Coast Pizzeria”, ”address”: ”790 Castro St, Mountain View, CA”, ”lat”: 37.387138366699, ”lng”: -122.08323669434, ”fogaanta”: 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”, ”address”: ”570 N Shoreline Blvd, Mountain View, CA”, ”Lat”: 37.402652740479, ”lng”: - 122.07935333252, ”distance”: 16077.420540582}, {“id”: 5, ”name”: ”Tony & Alba’s Pizza & Pasta”, ”address”: ”619 Escuela Ave, Mountain View, CA ”,” lat ”: 37.394012451172,” lng ”: - 122.09552764893,” distance ”: 16078.563225154}, {“ id ”: 6,” name ”:” Oregano’s Wood-Fired Pizza ”,” address ”:” 4546 El Camino Real, Los Altos, CA ”,” lat ”: 37.401725769043,” lng ”: - 122.11464691162,” distance ”: 16077.937560795}, {“ id ”: 7,” name ”:” The bars and grill ”,” address ”:” 24 Whiteley Street, Manchester ”,” lat ”: 53.485118865967,” lng ”: - 2.1828699111938,” distance ”: 8038.7620112314}]
Waxaan rabaa inaan la soo baxo kaliya safaf 20 mayl ah laakiin waxay keenaysaa safaf dhan. Fadlan maxaan khalad sameynayaa
Waxaan raadinayaa su'aal la mid ah laakiin xoogaa kor ayaan u qaaday - marka la soo gaabiyo tani waa in la isku geeyo dhammaan isku -duwayaasha u jira 2 mayl isku -duwaha kasta kadibna la tiriyo inta isuduwayaal ee koox kasta oo soo saara hal koox oo leh isku -duwayaasha ugu badan - xitaa haddii waxaad haysataa in ka badan hal koox oo ka mid ah kooxaha leh tirada ugu badan ee isku -duwayaasha - si fudud uga soo saara kooxda aan kala sooca lahayn kooxaha leh tirada ugu badan -