דעם חודש איך'ווע פּראָגראַממינג אַ ביסל אין PHP און MySQL וועגן GIS. סנאָאָפּינג אַרום די נעץ, איך פאקטיש האט אַ שווער מאָל צו געפֿינען עטלעכע פון די דזשיאַגראַפיק חשבונות צו געפֿינען די ווייַטקייט צווישן צוויי לאָוקיישאַנז, אַזוי איך געוואלט צו טיילן זיי דאָ.
די פּשוט וועג צו רעכענען אַ ווייַטקייט צווישן צוויי פונקטן איז ניצן די פּיטהאַגאָרעאַן פאָרמולע צו רעכענען די כייפּאַטענאַס פון אַ דרייַעק (A² + B² = C²). דאָס איז באַוווסט ווי דער עוקלידיאַן ווייַטקייט.
דאָס איז אַ טשיקאַווע אָנהייב, אָבער דאָס איז נישט גילטיק פֿאַר געאָגראַפי, ווייַל די ווייַטקייט צווישן ברייט און לאַנדזשאַטוד שורות זענען ניט אַן גלייַך ווייַטקייט באַזונדער. ווען איר באַקומען נעענטער צו דער עקוואַטאָר, די ברייט פון די ברייט זענען ווייטער באַזונדער. אויב איר נוצן אַ טיפּ פון פּשוט טריאַנגולאַטיאָן יקווייזשאַן, עס קען מעסטן דיסטאַנסע אַקיעראַטלי אין איין אָרט און טעראַבלי פאַלש אין די אנדערע ווייַל פון די קערוואַטשער פון דער ערד.
גרויס סירקלע דיסטאַנסע
די רוץ וואָס זענען געפארן לאַנג דיסטאַנסאַז אַרום דער ערד זענען באַוווסט ווי דער גרויס סירקלע דיסטאַנסע. דאָס איז ... די שאָרטיסט ווייַטקייט צווישן צוויי פונקטן אויף אַ קויל איז אַנדערש ווי די ווייזט אין אַ פלאַך מאַפּע. קאַמביין דעם מיט די פאַקט אַז די ברייט און לאַנדזשאַטוד שורות זענען נישט יקווידיסטאַנט ... און איר האָט אַ שווער כעזשבן.
דאָ ס אַ פאַנטאַסטיש ווידעא דערקלערונג פון ווי גרויס קרייזן אַרבעט.
די האַווערסינע פאָרמולע
די ווייַטקייט ניצן די קערוואַטשער פון דער ערד איז ינקאָרפּערייטיד אין די האַווערסינע פאָרמולע, וואָס ניצט טריגאָנאָמעטרי צו לאָזן די קערוואַטשער פון דער ערד. אויב איר געפֿינען די ווייַטקייט צווישן 2 ערטער אויף דער ערד (ווי די קראָו פליעס), אַ גלייך ליניע איז טאַקע אַ קרייַזבויגן.
דאָס איז אָנווענדלעך אין לופט פלי - האָבן איר טאָמיד געקוקט אויף די פאַקטיש מאַפּע פון פלייץ און באמערקט אַז זיי זענען אַרטשט? דאָס איז ווייַל עס איז קירצער צו פליען אין אַ אַרטש צווישן צוויי פונקטן ווי גלייַך צו דעם אָרט.
PHP: רעכענען דיסטאַנסע צווישן 2 פונקטן פון ברייט און לאַנדזשאַטוד
סייַ ווי סייַ, דאָ איז די PHP פאָרמולע פֿאַר קאַלקיאַלייטינג די ווייַטקייט צווישן צוויי פונקטן (צוזאמען מיט די מייל קעגן קילאָמעטער קאַנווערזשאַן) ראַונדיד צו צוויי דעצימאַל ערטער.
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));
}
סקל: צוריקקריגן אַלע רעקאָרדס אין אַ קייט דורך קאַלקיאַלייטינג דיסטאַנסע אין מייל ניצן ברייט און לאַנדזשאַטוד
עס איז אויך מעגלעך צו נוצן סקל צו מאַכן אַ כעזשבן צו געפֿינען אַלע רעקאָרדס אין אַ ספּעציפיש ווייַטקייט. אין דעם בייַשפּיל, איך וועל אָנפרעגן MyTable אין 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) as distance FROM `table` WHERE distance <= ".$distance."
איר דאַרפֿן צו קאַסטאַמייז דעם:
- $ לאַנדזשאַטוד - דאָס איז אַ פפּ בייַטעוודיק וווּ איך פאָרן די לאַנדזשאַטוד פון די פונט.
- $ ברייט - דאָס איז אַ פפּ בייַטעוודיק וווּ איך פאָרן די לאַנדזשאַטוד פון די פונט.
- $ ווייטקייט - דאָס איז די ווייַטקייט וואָס איר ווילט צו געפֿינען אַלע רעקאָרדס ווייניקער אָדער גלייַך צו.
- טיש - דאָס איז דער טיש ... איר וועט וועלן צו פאַרבייַטן דעם מיט דיין טיש נאָמען.
- ברייט - דאָס איז די פעלד פון דיין ברייט.
- לאַנדזשאַטוד - דאָס איז די פעלד פון דיין לאַנדזשאַטוד.
סקל: ריטריווינג אַלע רעקאָרדס אין אַ קייט דורך קאַלקיאַלייטינג דיסטאַנסע אין קילאָמעטערס ניצן ברייט און לאַנדזשאַטוד
און דאָ ס די SQL אָנפֿרעג מיט קילאָמעטערס אין 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."
איר דאַרפֿן צו קאַסטאַמייז דעם:
- $ לאַנדזשאַטוד - דאָס איז אַ פפּ בייַטעוודיק וווּ איך פאָרן די לאַנדזשאַטוד פון די פונט.
- $ ברייט - דאָס איז אַ פפּ בייַטעוודיק וווּ איך פאָרן די לאַנדזשאַטוד פון די פונט.
- $ ווייטקייט - דאָס איז די ווייַטקייט וואָס איר ווילט צו געפֿינען אַלע רעקאָרדס ווייניקער אָדער גלייַך צו.
- טיש - דאָס איז דער טיש ... איר וועט וועלן צו פאַרבייַטן דעם מיט דיין טיש נאָמען.
- ברייט - דאָס איז די פעלד פון דיין ברייט.
- לאַנדזשאַטוד - דאָס איז די פעלד פון דיין לאַנדזשאַטוד.
איך האָב גענוצט דעם קאָד אין אַ פֿירמע מאַפּינג פּלאַטפאָרמע אַז מיר געוויינט פֿאַר אַ לאַכאָדימ קראָם מיט איבער 1,000 לאָוקיישאַנז אַריבער צפון אַמעריקע, און עס אַרבעט ביוטאַפלי.
דאַנקען דיר זייער פיל פֿאַר ייַנטיילונג. דאָס איז געווען אַ גרינג קאָפּיע און פּאַפּ אַרבעט און אַרבעט גרויס. איר'ווע געראטעוועט מיר אַ פּלאַץ פון צייַט.
FYI פֿאַר ווער עס יז וואָס פאָרן צו C:
טאָפּל דעג 2 ראַד (טאָפּל דעג) {צוריק דעג * (3.14159265358979323846 / 180.0); }
זייער שיין שטיק פון פּאָוסטינג - געארבעט זייער פייַן - איך נאָר האָבן צו טוישן דעם נאָמען פון די טיש מיט די לאַט-לאַנג. עס אַרבעט שיין שנעל צו .. איך האָבן אַ ריזאַנאַבלי קליין נומער פון לאַט-לאָנגס (<400) אָבער איך טראַכטן דעם וואָלט נייסלי וואָג. פייַן פּלאַץ אויך - איך האָב דאָס פּונקט צוגעגעבן צו מיין del.icio.us חשבון און איך וועל קעסיידער טשעק צוריק.
דאַנקען זייער פיל פעטרוס און קערי! אויב איר ווי צו אַרבעטן מיט GIS פּראַדזשעקס, איך'ד רעקאָמענדירן:
דאנק איר זייער פיל ... 😀
איך האָב די גאנצע טאָג געזוכט פֿאַר ווייַטקייט חשבונות און געפֿונען די האַרווערסינע אַלגערידאַם, דאַנק צו איר פֿאַר די ביישפּיל פון דעם שטייגער אין אַ סקלע דערקלערונג. דאַנקען און גרוס, דניאל
צופרידן צו העלפן, ריילז פרייַנד!
איצט איך זוכן אַ PHP אין 'פאַליגאָן' פפּ פונקציע, וואָס וועט נעמען אַ פּלאַץ פון קאָואָרדאַנייץ פון ברייט און לאַנדזשאַטוד סיקוואַנסאַז און געפֿינען אויס אויב אן אנדער פונט איז ין אָדער אַרויס די פילעק.
איך געפֿונען די יקווייזשאַן צו רעכענען אויב אַ פונט אין אַ פילעק!
איך טראַכטן דיין סקל דאַרף אַ דערקלערונג.
אַנשטאָט וואו דיסטאַנסע <= $ ווייַטקייט איר קען דאַרפֿן
נוצן HAVING ווייַטקייט <= $ ווייַטקייט
אַנדערש דאַנק פֿאַר שפּאָרן מיר אַ בינטל פון צייט און ענערגיע.
העלא דוד,
אויב איר טאָן אַ טיפּ פון GROUP BY ויסזאָגונג, איר דאַרפֿן אַ. איך טאָן ניט טאָן דאָס אין דעם בייַשפּיל.
דאַג
פֿון MySQL 5.x, איר קענט נישט נוצן אַ אַליאַס אויף אַ WHERE פּונקט זען http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html
ניצן HAVING אַנשטאָט WHERE אין די אויבן קוועריז
א גרויסן יישר כח. איר האָט געטאן ויסגעצייכנט אַרבעט. דאָס איז די זאַך וואָס איך טאַקע וועלן. א גרויסן ש 'כח.
דאַנקען אַזוי פיל פֿאַר ייַנטיילונג דעם קאָד. עס געראטעוועט מיר אַ פּלאַץ פון אַנטוויקלונג צייט. אויך, דאַנק צו דיין לייענער פֿאַר פּוינטינג אַז אַ ווייל דערקלערונג איז נייטיק פֿאַר MySQL 5.x. זייער נוציק.
איך בין ברוך צו האָבן לייענער פיל סמאַרטער ווי איך בין!
????
די פאָרמולע שפּאָרן מיר אַ פּלאַץ פון צייט. א גרויסן יישר כח.
איך אויך האָבן צו באַשטימען צווישן די NMEA פֿאָרמאַט און דיגריז. איך געפֿונען אַ פאָרמולע אין דעם URL אין די דנאָ פון די בלאַט. http://www.errorforum.com/knowledge-base/16273-converting-nmea-sentence-latitude-longitude-decimal-degrees.html
קען ווער עס יז וויסן ווי צו באַשטעטיקן דעם?
דאנק איר!
מאַטערן
העלא,
אן אנדער קשיא. איז עס אַ פאָרמולע פֿאַר NMEA סטרינגס ווי די ונטער?
1342.7500, N, 10052.2287, E
$GPRMC,032731.000,A,1342.7500,N,10052.2287,E,0.40,106.01,101106,,*0B
דאַנק,
מאַטערן
איך האָב אויך געפֿונען אַז ווו קען נישט אַרבעטן פֿאַר מיר. געביטן עס צו ווייל און אַלץ אַרבעט שליימעסדיק. אין ערשטער איך האט נישט לייענען די באַמערקונגען און ריראָו עס מיט אַ נעסטעד סעלעקטירן. ביידע וועלן אַרבעט נאָר פייַן.
דאַנקען דיר זייער מאָוטש פֿאַר די שריפט געשריבן אין מיסקל, נאָר האט צו מאַכן ביסל מינערווערטיק אַדזשאַסטמאַנץ (ווייל) 🙂
גרעט אַרבעט
ינקרעדאַבלי נוציק, דאַנקען דיר זייער פיל! איך האָב עטלעכע פּראָבלעמס מיט די נייַע "HAVING", אלא ווי "WHERE", אָבער אַמאָל איך לייענען די באַמערקונגען דאָ (נאָך וועגן אַ האַלב שעה פון גרינדינג מיין ציין אין פראַסטריישאַן = P), איך גאַט עס ארבעטן נייסלי. דאנק איר ^ _ ^
דאַנקען אַ פּלאַץ אַרבעט גרויס
געדענקען אַז אַזאַ אַ ויסזאָגונג ויסזאָגונג וועט זיין זייער טיף און דעריבער פּאַמעלעך. אויב איר האָט אַ פּלאַץ פון די פֿראגן, עס קען זיין געשווינד געשווינד.
א פיל ווייניקער טיף צוגאַנג איז צו לויפן אַ ערשטער (גראָב) סעלעקטירן ניצן אַ קוואדראט געגנט דיפיינד דורך אַ קאַלקיאַלייטיד ווייַטקייט, ד"ה "סעלעקטירן * פֿון טאַבלענאַמע וווּ ברייט צווישן לאַט 1 און לאַט 2 און לאַנדזשאַטוד צווישן לאָנ 1 און לאָנ 2. לאַט 1 = טאַרגאַטיטודע - לאַטדיפף, לאַט 2 = טאַרגאַטיטודע + לאַטדיפף, ענלעך מיט לאָן. latdiff ~ = דיסטאַנסע / 111 (פֿאַר קילאמעטער), אָדער דיסטאַנסע / 69 פֿאַר מייל זינט 1 גראַד פון ברייט איז ~ 111 קילאמעטער (קליין ווערייישאַן זינט ערד איז אַ ביסל אָוואַל, אָבער גענוג פֿאַר דעם צוועק). לאָנדיפף = דיסטאַנסע / (אַבס (קאָס (דעג 2 ראַד (ברייט)) * 111)) - אָדער 69 פֿאַר מייל (איר קענט טאַקע נעמען אַ ביסל גרעסערע קוואַדראַט צו זיין אַקאַונטאַד פֿאַר ווערייישאַנז). דערנאָך נעמען די רעזולטאַט פון אים און קאָרמען עס אין די ריידיאַל סעלעקטירן. נאָר טאָן ניט פאַרגעסן צו נעמען אַ קאָואָרדאַנאַץ וואָס זענען נישט אין דער געגנט - דאָס הייסט די קייט פון פּאַסיק לאַנדזשאַטוד איז -180 צו +180 און די קייט פון פּאַסיק ברייט איז -90 צו +90 - אין פאַל דיין לאַטדיף אָדער לאָנדיפף לויפן אַרויס דעם קייט . באַמערקונג אַז אין רובֿ פאלן, דאָס קען נישט זיין אָנווענדלעך, ווייַל דאָס איז בלויז אַפעקץ קאַלקיאַליישאַנז איבער אַ פּאַסיפיק אקעאן פון פלאָקן צו פלאָקן, כאָטש עס איז אַ טייל פון טשוקאָטקאַ און אַ טייל פון אַלאַסקאַ.
וואָס מיר דערגרייכן דאָס איז אַ באַטייטיק רעדוקציע אין די נומער פון ווייזט קעגן וואָס איר רעכענען דעם חשבון. אויב איר האָבן אַ מיליאָן גלאבאלע פונקטן אין די דאַטאַבייס פאַרשפּרייטן בעערעך יוואַנלי און איר ווילן צו זוכן אין 100 קילאמעטער, דיין ערשטער (שנעל) זוכן איז אַ שטח פון 10000 סק.מ., און מיסטאָמע וועט געבן וועגן 20 רעזולטאַטן (באזירט אויף גלייך פאַרשפּרייטונג ייבערפלאַך געגנט פון וועגן 500 ם סק. קילאמעטער), וואָס מיטל אַז איר מאַכן דעם קאָמפּלעקס דיסטאַנסע כעזשבן 20 מאָל פֿאַר דעם אָנפֿרעג אַנשטאָט פון אַ מיליאָן מאָל
מינדערווערטיק גרייַז אין דעם בייַשפּיל ... וואָס וואָלט זיין ין 50 קילאמעטער (נישט 100), ווייַל מיר קוקן אין די "ראַדיוס" פון אונדזער ... קוואַדראַט.
פאַנטאַסטיש עצה! איך האָב טאַקע געארבעט מיט אַ דעוועלאָפּער וואָס האָט געשריבן אַ פונקציע וואָס פּולד די ין קוואַדראַט און דערנאָך אַ רעקורסיווע פונקציע וואָס געמאכט 'סקווערז' אַרום די פּערימעטער צו אַרייַננעמען און ויסשליסן די רוען פונקטן. דער רעזולטאַט איז געווען אַ ינקרעדאַבלי שנעל רעזולטאַט - ער קען אָפּשאַצן מיליאַנז פון פונקטן אין מיקראָסעקאַנדז.
מיין צוגאַנג אויבן איז באשטימט 'גראָב' אָבער טויגעוודיק. א דאנק, נאכאמאהל!
דאַג,
איך האָב געפרוווט צו נוצן מיסקל און פפּ צו אָפּשאַצן צי אַ לאַט לאַנג פונט איז ין אַ פילעק. צי איר וויסן אויב דיין דעוועלאָפּער פרייַנד האָט פארעפנטלעכט ביישפילן וועגן ווי צו דערגרייכן דעם אַרבעט? אָדער טאָן איר וויסן גוטע ביישפילן. דאַנקען אין שטייַגן.
הי אַלעמען, דאָס איז מיין פּרובירן סקל סטאַטעמענט:
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
און מיסקל זאגט מיר אַז דיסטאַנסע איז נישט ווי אַ זייַל, איך קען נוצן סדר דורך, איך קענען טאָן עס אָן וואו, און עס אַרבעט, אָבער נישט מיט אים ...
פאַרבייַטן "וואו ווייַטקייט" מיט "האָבן ווייַטקייט".
אַרבעט ווי אַ כיין, דאַנק, דאָוגלאַס!
דאָס איז גרויס, אָבער פּונקט ווי די פייגל פליען. עס וואָלט זיין גרויס צו פּרובירן צו ינקאָרפּערייט די Google מאַפּס אַפּי צו דעם עפעס (אפֿשר ניצן ראָודז, אאז"ו ו) נאָר צו געבן אַ געדאַנק מיט אַ אַנדערש פאָרעם פון טראַנספּערטיישאַן. איך נאָך האָבן צו מאַכן אַ סימיאַלייטיד אַנילינג פונקציע אין פפּ אַז קען פאָרשלאָגן אַ עפעקטיוו לייזונג צו דער טראַוואַלינג פאַרקויפער פּראָבלעם. אָבער איך טראַכטן איך קען זיין ביכולת צו רייוז עטלעכע פון דיין קאָד צו טאָן דאָס.
הי דאָוגלאַס,
דאַנקען דיר אַזוי פיל פֿאַר דעם אַרטיקל - איר נאָר געראטעוועט מיר אַ פּלאַץ פון צייט.
נעמען קעיר,
nimrod @ ישראל
גוטע אַרטיקל! איך געפֿונען אַ פּלאַץ פון אַרטיקלען וואָס דיסקרייבינג ווי צו רעכענען די ווייַטקייט צווישן צוויי פונקטן, אָבער איך איז טאַקע קוקן פֿאַר די סקל סניפּאַט.
א גרויסן דאַנק אַרבעט גוט
דאַנקען דיר פיל פֿאַר דעם פאָרמולע. עס שייווד עטלעכע מאָל אויף אַ קראָם אָרט פּרויעקט וואָס איז געווען עסן מיר.
דאַנקען אַ פּעקל. די ביסל קאָד שורה שפּאָרן מיר עטלעכע מאָל אין אַ קראָם אָרט פּרויעקט!
# 1054 - אומבאַקאַנט זייַל 'דיסטאַנסע' אין 'ווו פּונקט'
אַפּרווו
די זעלבע דא! וואָס ס די פּראָבלעם: - /? ווי צו סאָלווע די "ווייַטקייט" - זייַל פּראָבלעם? הילף אונדז, ביטע !! 🙂
פּרוּווט ניצן HAVING אַנשטאָט WHERE
2 טעג פון פאָרשונג צו לעסאָף געפֿינען דעם בלאַט וואָס סאַלווז מיין פּראָבלעם. איך קוק בעסער מיין WolframAlpha און ברעכן מיין מאַטאַמאַץ. די ענדערונג פון WHERE צו HAVING האט מיין שריפט אין ארבעטן סדר. אדאנק
אַנשטאָט WHERE פּונקט נוצן:
ווייל ווייַטקייט <50
דאַנקען געאָרגי. איך קעסיידער באַקומען זייַל 'דיסטאַנסע' ניט געפֿונען אַמאָל איך טוישן די וואו צו האָבן עס געארבעט ווי אַ כיין!
איך ווינטשן דאָס איז געווען דער ערשטער בלאַט איך געפֿונען אויף דעם. נאָך טריינג פילע פאַרשידענע קאַמאַנדז, דאָס איז געווען דער בלויז אַרבעט רעכט און מיט מינימאַל ענדערונגען צו זיין פּאַסיק פֿאַר מיין אייגענע דאַטאַבאַסע.
דאַנק אַ פּלאַץ!
איך ווינטשן דאָס איז געווען דער ערשטער בלאַט איך געפֿונען אויף דעם. נאָך טריינג פילע פאַרשידענע קאַמאַנדז, דאָס איז געווען דער בלויז אַרבעט רעכט און מיט מינימאַל ענדערונגען צו זיין פּאַסיק פֿאַר מיין אייגענע דאַטאַבאַסע.
דאַנק אַ פּלאַץ!
א גרויסן ש 'כח!
א גרויסן ש 'כח!
איך טאָן ניט טראַכטן די קאָד איז געוויזן אַרויף ענימאָר. אפֿשר עס ס Firefox?
איך נאָר טעסטעד ביידע אין Firefox און Chrome און עס איז אַפּירינג. פּרובירן ווידער?
הי. א גרויסן ש 'כח. דאָס אַרבעט ווי אַ כיין.
א גרויסן דאַנק דאָוגלאַס. דאָס איז ארבעטן שליימעסדיק.
איך וויסן אַז די פאָרמולע אַרבעט, אָבער איך קען נישט זען וווּ די ראַדיוס פון דער ערד איז גענומען אין חשבון. קענען ווער עס יז ענלייטאַן מיר, ביטע?
טים, פֿאַר אַ פול דערקלערונג פון די האַווערסינע פאָרמולע (דאָס איז נישט קאָד), טשעק אויס די אַרטיקל פון Wikipedia: http://en.wikipedia.org/wiki/Haversine_formula
שיין! דאָס האָט מיר געהאָלפֿן ימענסלי!
גרויס שטאָפּן דאָוגלאַס. האָבן איר געפרוווט צו באַקומען די ינטערסעקשאַן פונט געגעבן די לאנג / לאַט / בערינג פון צוויי פונקטן?
כ'האב דאס נאך נישט געטון, חנה!
דאַנקען דיר דאָוגלאַס, די SQL Query איז פּונקט וואָס איך דארף און איך געדאַנק איך וואָלט האָבן צו שרייַבן עס זיך. איר'ווע געראטעוועט מיר פון עפשער שעה פון ברייט לאַנדזשאַטוד לערנען ויסבייג!
איך פאָרזעצן צו באַקומען ערראָרמעססאַגע: אומבאַקאַנט זייַל 'דיסטאַנסע' אין 'ווו פּונקט' אויף די מיסקל אָנפֿרעג.
פעטרוס, ביטע לייענען דורך די אנדערע באַמערקונגען. עס מיינט אַז עטלעכע מענטשן האָבן צו נוצן אַ אַנדערש סינטאַקס פֿאַר WHERE / HAVING.
דאנק איר פֿאַר דעם גרויס אַרטיקל! פּונקט טעסטעד די קאָד אויף מיין דב און געארבעט גרויס!
דאָוגלאַס, דאַנקען דיר פֿאַר דעם אַמייזינג קאָד. איך בין קראַקינג מיין קאָפּ ווי צו טאָן דאָס אויף מיין GPS קהל טויער. איר'ווע געראטעוועט מיר שעה.
גרויס צו הערן, אַש!
דאַנקען פֿאַר פּאָסטינג דעם נוציק אַרטיקל,
אָבער פֿאַר עטלעכע סיבה איך'ד ווי צו פרעגן
ווי אַזוי צו באַקומען די ווייַטקייט צווישן קאָאָרדס ין מיסקל דב און קאָואָרדז ינסערטאַד צו PHP דורך באַניצער?
פֿאַר מער קלאר באַשליסן:
1. באַניצער דאַרף אַרייַן [יד] פֿאַר סאַלעקטינג די דאַטן פֿון די דב און די קאָאָרדס פון די באַניצער זיך
2. די PHP טעקע באַקומען די ציל דאַטן (קאָאָרדס) ניצן [יד] און דעמאָלט רעכענען די ווייַטקייט צווישן באַניצער און ציל פונט
אָדער קענען נאָר באַקומען דיסטאַנסע פֿון די קאָד ונטער?
$ qry = “SELECT *, (((acos (sin ((“. $ latitude. ”* pi () / 180)) * sin ((` Latitude` * pi () / 180)) + cos ((“. $ ברייט. ”* pi () / 180)) * cos ((` ברייט` * pi () / 180)) * cos ((((. $ Longitude. - Longitude`) pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) ווי ווייַטקייט פֿון `MyTable` WHERE distance> =“. $ Distance. ” >>>> קען איך "נעמען" די ווייַטקייט פון דאָ?
א דאנק, נאכאמאהל,
טימי ז
גאָרנישט, איך'ווע רעכענען אויס ווי די "פונקציע" אַרבעט אין PHP
$ דיס = getDistanceBetweenPointsNew ($ userLati, $ userLongi, $ lati, $ longi, $ unit = 'Km')
א גרויסן ש 'כח!!
גוט, אַלץ וואָס איך געפרוווט איז נישט ארבעטן. איך מיינען, וואָס איך האָבן אַרבעט, אָבער די דיסטאַנסאַז זענען אַוועק.
קען ווער עס יז זען וואָס איז פאַלש מיט דעם קאָד?
אויב (יסעט ($ _ פּאָסט ['דערלאנגט'])) {$ ז = $ _ פּאָסט ['פּאָסטקאָדע']; $ ר = $ _ פּאָסט ['ראַדיוס']; ווידערקאָל “רעזולטאַטן פֿאַר“. $ ז; $ 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. שטאָט, z1.state פֿון mrk m, פאַרשלעסלען z1, פאַרשלעסלען z2 וואו m.zip קאָדע = z1. זיפּקאָדע און Z2. זיפּקאָדע = $ 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 ") אָדער שטאַרבן (mysql_error ()); while ($ row = mysql_fetch_array ($ sql)) {$ store1 = $ row ['MktName']. "”; $ קראָם = $ רודערן ['LocAddSt']. ””; $ store. = $ row ['LocAddCity']. ”,“. $ row ['LocAddState']. ” “. $ רודערן ['פּאָסטקאָדע']; $ לאַטיטוד 1 = $ רודערן ['לאַט']; $ לאָנגיטוד 1 = $ רודערן ['לאָן']; $ לאַטאַטוד 2 = $ רודערן ['y1']; $ לאָנגיטוד 2 = $ רודערן ['קס 1']; $ שטאָט = $ רודע ['שטאָט']; $ שטאַט = $ רודערן ['שטאַט']; $ דיס = getnew ($ לאַטיטוד 1, $ לאָנגיטוד 1, $ לאַטיטוד 2, $ לאָנגיטוד 2, $ אַפּאַראַט = 'מי'); // $ דיס = ווייַטקייט ($ לאַט 1, $ לאָנ 1, $ לאַט 2, $ לאָנ 2); $ וועראַפייד = $ רודערן ['וועראַפייד']; if ($ verified == '1') {echo “”; ווידערקאָל "". $ קראָם. ""; echo $ דיס. ”מייל (s) אַוועק”; ווידערקאָל “”; } אַנדערש {ווידערקאָל “”. $ קראָם. ””; echo $ דיס. ”מייל (s) אַוועק”; ווידערקאָל “”; }}}
מיין פונקטיאָנס.פפּ קאָד
פֿונקציע getnew ($ latitude1, $ longitude1, $ latitude2, $ longitude2, $ unit = 'Mi') {$ theta = $ longitude1 - $ longitude2; $ ווייַטקייט = (sin (deg2rad ($ latitude1)) * sin (deg2rad ($ latitude2))) + (cos (deg2rad ($ latitude1)) * cos (deg2rad ($ latitude2)) * cos (deg2rad ($ theta)) ); $ ווייַטקייט = אַקאָס ($ ווייַטקייט); $ ווייַטקייט = rad2deg ($ ווייַטקייט); $ ווייַטקייט = $ ווייַטקייט * 60 * 1.1515; באַשטימען ($ אַפּאַראַט) {פאַל 'מי': ברעכן; קאַסע 'Km': $ distance = $ distance * 1.609344; } צוריקקומען (קייַלעכיק ($ ווייַטקייט, 2)); }
דאנק איר אין שטייַגן
דאנק איר פֿאַר דעם אַרטיקל. ארבעטן פייַן מיט מיין קאָד. 🙂
היי דאָוגלאַס, גרויס אַרטיקל. איך האָב געפֿונען דיין דערקלערונג פון די דזשיאַגראַפיקאַל קאַנסעפּס און די קאָד טאַקע טשיקאַווע. מייַן בלויז פאָרשלאָג איז צו אָרט און ינדענט די קאָד פֿאַר אַרויסווייַזן (פֿאַר בייַשפּיל סטאַקקאָווערפלאָוו). איך פֿאַרשטיין אַז איר ווילן צו קאַנסערוו פּלאַץ, אָבער קאַנווענשאַנאַל קאָד ספּייסינג / ינדענטיישאַן וואָלט מאַכן עס פיל גרינגער פֿאַר מיר, ווי אַ פּראָגראַמיסט, צו לייענען און דייסעקט. סייַ ווי סייַ, דאָס איז אַ קליין זאַך. האַלטן די גרויס אַרבעט.
דאַנקען! איך'ווע מאַדאַפייד דעם פּאָסטן אַ ביסל ... אָבער די יקווייזשאַנז נעמען אַזוי פיל פּלאַץ און זענען אַזוי לאַנג אַז איך בין נישט זיכער אַז עס העלפּס צו פיל.
א גרויסן יישר כח.
דאָ בשעת ניצן מיט פונקציע, מיר באַקומען איין טיפּ פון דיסטאַנסע .. בשעת ניצן די אָנפֿרעג, עס קומט אַן אנדערע טיפּ פון דיסטאַנסע
איך טאָן ניט רעכענען די ווייַטקייט צווישן צוויי שטאַט
פיל ס גרוס פון די הערמאָסאָ קאָדיגאָ…
דאָס איז גוט קאָסינוס פאַנגקשאַנז. איך טאָן ניט וויסן מאַט, אָבער דאַנק!
גרויס אַרבעט ... 🙂 (y)
עס מיינט פאַסטער (מיסקל 5.9) צו נוצן צוויי מאָל די פאָרמולע אין די סעלעקטירן און ווו:
$ פאָרמולע = “((((acos (sin ((“. $ latitude. ”* pi () / 180)) * sin ((` Latitude` * pi () / 180)) + cos ((“. $ latitude. ”* Pi () / 180)) * cos ((` Latitude` * pi () / 180)) * cos (((“. $ Longitude.” - `Longitude`) * pi () / 180)))) * 180 / פּי ()) * 60 * 1.1515 * 1.609344) ”;
$ sql = 'SELECT *,'. $ פאָרמולע. ' ווי ווייַטקייט פֿון טיש וואו '.. $ פאָרמולע.' <= '. $ ווייַטקייט;
דאַנקען ...
נישט ארבעטן אויב
"וואו ווייטקייט"
ארבעטן אויב
"האָבן ווייַטקייט"
א גרויסן דאַנק פֿאַר שערן דעם אַרטיקל. עס איז זייער נוציק.
ערשטער, PHP איז באשאפן ווי אַ פּשוט סקריפּטינג פּלאַטפאָרמע גערופֿן "פערזענלעכע היים בלאַט". נאָוואַדייַס PHP (דער קורץ פֿאַר Hypertext Preprocessor) איז אַן אָלטערנאַטיוו פון די Microsoft ASP אַקטיווע סערווירער בלעטער (ASP) טעכנאָלאָגיע.
פפּ איז אַן אָפֿן מקור סערווערס זייַט שפּראַך וואָס איז גענוצט פֿאַר שאפן דינאַמיש וועב זייַטלעך. עס קענען זיין עמבעדיד אין HTML. פפּ איז יוזשאַוואַלי געניצט אין קאַנדזשאַנגקשאַן מיט אַ MySQL דייטאַבייס אויף Linux / UNIX וועב סערווערס. עס איז מיסטאָמע די מערסט פאָלקס סקריפּטינג שפּראַך.
איך געפונען אויבן לייזונג איז נישט ארבעטן רעכט.
איך דאַרפֿן צו טוישן צו:
$ qqq = “SELECT *, (((acos (sin ((“. $ latitude. ”* pi () / 180)) * sin ((` latt` * pi () / 180)) + cos ((”. $ ברייט. "* pi () / 180)) * cos ((` latt` * pi () / 180)) * cos (((". $ longitude." - `longt`) * pi () / 180) ))) * 180 / פּי ()) * 60 * 1.1515) ווי ווייַטקייט פֿון `רעגיסטרירן`“;
דאַנקען קופּענדראַ!
דאַנקען דיר האר ווראָקינג בישליימעס .. אָבער איך האָבן איין קשיא אויב איך ווילן צו רעזולטאַט אָן דעצימאַל פונט, וואָס קען איך טאָן ..?
דאַנק אין שטייַגן.
העלא, ביטע איך טאַקע דאַרפֿן דיין הילף אין דעם.
איך האָב באַקומען אַ בעטן צו מיין וועב סערווער http://localhost:8000/users/findusers/53.47792/-2.23389/20/
53.47792 = $ ברייט
-2.23389 = $ לאַנדזשאַטוד
און 20 = די ווייַטקייט איך ווילן צו צוריקקריגן
אָבער מיט איר פאָרמולע, עס ריטריווז אַלע ראָוז אין מיין דב
$ רעזולטאַטן = DB :: סעלעקטירן (DB :: רוי (“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) ווי ווייַטקייט פֿון מאַרקערס HAVING distance> = “. $ 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, "לנג": - 122.07891845703, "דיסטאַנסע": 16078.381373826}, {"יד": 4, "נאָמען": "קייַלעכיק טיש פּיצאַ: Mountain View", "אַדרעס": "570 N שאָרליין בלווד, 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 grills "," address ":" 24 Whiteley Street, Manchester "," lat ": 53.485118865967," lng ": - 2.1828699111938," distance ": 8038.7620112314}]
איך ווילן צו באַקומען נאָר ראָוז מיט 20 מייל, אָבער עס ברענגט אַלע ראָוז. ביטע וואָס טאָן איך טאָן פאַלש?