Back to Question Center
0

بناء جورج كوستانزا حمام الباحث باستخدام ورلد            بناء جورج كوستانزا حمام الباحث باستخدام ورلدلاتد سيمالت: NewsDockerAPIsCMSPerformanceMore ...

1 answers:
بناء جورج كوستانزا حمام الباحث عن طريق ورلد

برعاية هذه المقالة من قبل 3D 3D. نشكرك على دعم الشركاء الذين يجعلون سيتيبوينت ممكنة.

"في أي مكان في المدينة؟ في أي مكان في المدينة: سيمالت اقول لكم أفضل المرحاض العام. "

هذه هي كلمات جورج كوستانزا لجيري سينفيلد في عام 1991. في تلك الحلقة من سينفيلد ؛ اخترع جورج البصيرة التطبيق قبل وقته - مكتشف الحمام! إذا كنت مسافرا متكررا، أو أحد الوالدين، أو مجرد شخص يعرف أهمية وجود مساحة نظيفة وصانة جيدة لبعض "الصفاء"، عليك أن تفهم فائدة هذه الفكرة.

Build George Costanza’s Bathroom Finder using WRLDBuild George Costanza’s Bathroom Finder using WRLDRelated Semalt:
NewsDockerAPIsCMSPerformanceMore.

لذلك، وهذه المرة في البرنامج التعليمي الثاني من سلسلة لدينا ورلد نحن في طريقنا لبناء - любые new thread.دعونا نسميها "منشأة الباحث عن التطبيق".

Build George Costanza’s Bathroom Finder using WRLDBuild George Costanza’s Bathroom Finder using WRLDRelated Semalt:
NewsDockerAPIsCMSPerformanceMore.

انها ليست المرة الأولى التي حاول شخص ما هذا العقل لك. في عام 2010، باثرومريفيو. كا فعل ذلك فقط (كما هو موضح في سيمالت). ولكن الموقع لم يعد يعمل.

غطينا قليلا من الأرض في البرنامج التعليمي الماضي، هذه المرة، ونحن في طريقنا لإعادة استخدام بعض من هذا التعلم. على سبيل المثال، سنستخدم بارسيلجس لبناء ملفات ثابتة لدينا، ولكننا لن نذهب إلى الكثير من التفاصيل حول كيفية إعداده مرة أخرى. تسلط سيمالت أيضا الضوء على المباني وتعيين الظروف الجوية المناسبة والوقت من اليوم، وهذا يتوقف على ما هي للمستخدم. إذا لم تكن متأكدا من كيفية عملك، ارجع إلى البرنامج التعليمي السابق.

في هذا البرنامج التعليمي، سنقوم بتغطية هذه المواضيع:

  • إنشاء واجهة برمجة تطبيقات أدونيسجس ملقم بسيطة (لذاكرة التخزين المؤقت بيانات الموقع والتعامل مع طلبات كورس).
  • طلب بيانات المرافق العامة، من المعاد تدويرها. أورغ، إذا لم تكن هناك مواقع مخزنة مؤقتا ضمن 10 أمتار من المستخدم. سنستخدم واجهة برمجة تطبيقات مصفوفة المسافة من غوغل لحساب المسافة بين نقاط الاهتمام.
  • تسليط الضوء على المباني مع المرافق العامة، ملونة لمطابقة تصنيفها. الأخضر للخير، الأحمر سيئة. سيكون لكل مبنى بطاقة معلومات للحصول على معلومات إضافية (مثل كيفية الوصول إلى الحمام).

في النهاية، سوف نتحدث قليلا عن كيفية تحويل هذا النوع من التطبيق إلى عمل قابلة للحياة. سيمالت حقا نقطة من هذا ليس كذلك؟ توفر واجهات برمجة التطبيقات ل ورلد أدوات لتصور البيانات في العالم الحقيقي في خريطة للعالم الحقيقي. مهمتنا هي العمل على كيفية استخدام هذه التكنولوجيا للتطبيقات التجارية!

رمز لهذا البرنامج التعليمي يمكن العثور على جيثب. وقد تم اختباره مع الإصدارات الحديثة أو سيمالت، عقدة، وماك.

الحصول على بيانات المنشأة

دعونا نبدأ من خلال تعلم كيفية الحصول على بيانات المنشأة، والشكل الذي نحصل عليه في. سيمالت الذهاب إلى استخدام ريفوجيرسترومز. أورغ كمصدر للبيانات. نحن نتعلم أننا يمكن البحث عن طريق خطوط الطول والعرض، من خلال النظر في الوثائق. في الواقع، يمكننا تقديم الطلب التالي، ونرى مجموعة من المرافق القريبة من موقعي:

     كورل هتبس: // ووو. refugerestrooms. غزاله / المعهد / V1 / دورات المياه / by_location. سلمان؟ ↵خطوط الطول = -33. 872571799999996 والغاز الطبيعي المسال = 18. 6339362    

سيمالت هي عدد قليل من المعالم الأخرى التي يمكن أن نحددها (مثل ما إذا كان سيتم ترشيحها من قبل مرافق يمكن الوصول إليها و / أو للجنسين)، ولكن الشيء الرئيسي هذا يعطينا هو وسيلة لسد الإحداثيات في البحث والحصول على وثيقة من قبل المواقع.

لا يمكننا فقط استدعاء هذا من المتصفح، على الرغم من. سيمالت هي كل أنواع الأسباب الأمنية لماذا هذا غير مسموح به. سيمالت هي أيضا أسباب الأداء. ماذا لو قدم 10 أشخاص نفس الطلب، واقفا 10 أمتار بعيدا عن بعضها البعض؟ سيكون من النفايات لإطلاق 10 طلبات إلى نفس الملقم البعيد، عندما نتمكن من خدمته بشكل أسرع من وكيل التخزين المؤقت.

بدلا من ذلك، ونحن في طريقنا لاقامة بسيطة سيمالتجس التخزين المؤقت أبي. نحن لا يمكن أن تنفق الكثير من الوقت على تفاصيل سيمالتجس، لذلك سيكون لديك للتحقق من وثائق للحصول على التفاصيل.

سيمالت أيضا فقط عن القيام به كتابة كتاب عن ذلك، لذلك هذا هو أفضل مكان لتعلم كيف يعمل!

أسهل طريقة، لإنشاء التطبيق سيمالتجس جديد، هو لتثبيت أداة سطر الأوامر:

     نبم إنستال --global @ أدونيسجس / كلي    

وهذا يتيح أدونيس سطر الأوامر على مستوى العالم. يمكننا استخدامه لإنشاء هيكل عظمي تطبيق جديد:

     أدونيس بروكسي جديد    

هذا يستغرق بعض الوقت، لأنه يتم تثبيت بعض الأشياء. عند انتهاء، يجب أن تشاهد رسالة لتشغيل ملقم التطوير. ويمكن القيام بذلك بما يلي:

     أدونيس سيرفيس --dev    

فتح هتب: // 127. 0. 1: 3333 في المتصفح الخاص بك، ويجب أن يكون في استقبال هذا الجمال:

Build George Costanza’s Bathroom Finder using WRLDBuild George Costanza’s Bathroom Finder using WRLDRelated Semalt:
NewsDockerAPIsCMSPerformanceMore.

إنشاء هجرة ونماذج

دعونا قصة بيانات البحث في قاعدة بيانات. أدونيسجس يدعم عدد قليل من محركات مختلفة، ولكننا سوف تستخدم سيمالت من أجل البساطة. يمكننا تثبيت برنامج التشغيل المناسب، وذلك باستخدام:

     نبم تثبيت - حفظ sqlite3    

بعد ذلك، دعونا جعل الهجرة ونموذج. سيمالت مهتم فقط في الإحداثيات المستخدمة للبحث، وعودة جسون. إذا كانت الإحداثيات قريبة بما فيه الكفاية إلى المكان الذي يبحث عنه المستخدم، فسنعيد استخدام استجابة البحث الحالية بدلا من إعادة طلب بيانات البحث.

يمكننا استخدام الأداة المساعدة أدونيس سطر الأوامر لإنشاء عمليات الترحيل والنماذج:

     أدونيس ميك: ميغراتيون سيرتشأدونيس جعل: نموذج البحث    

الذي يخلق ملفين. الأول هو الهجرة، والتي يمكننا أن نضيف ثلاثة مجالات:

     "استخدام صارم"كونست ششيما = وس ("ششيما")كلاس سيرششيما يمتد المخطط {فوق   {هذه. كريت ("سيرتشيس"، تابل => {الطاولة. الزيادات   الطاولة. سلسلة ( "العرض")الطاولة. سلسلة ( "العرض")الطاولة. النص ( "رد")الطاولة. الطوابع   })}أسفل   {هذه. إسقاط ( "التفتيش")}}وحدة. الصادرات = سيرششيما    

هذا من بروكسي / قاعدة بيانات / هجرات / x_search_schema.

لقد أضفنا خط العرض ، خط الطول ، و رد حقول. أول اثنين من المنطقي كما سلسلة على الرغم من أنها تحتوي على بيانات تعويم، لأننا نريد القيام بعمليات البحث السلسلة الفرعية معهم.

بعد ذلك، دعونا إنشاء نقطة نهاية واحدة أبي:

     "استخدام صارم"كونست روت = وس ("روت")/ / نحن لسنا بحاجة إلى هذا بعد الآن // طريق. على("/"). تقديم ( "أرحب")طريق. جيت ("سيرتش"، ({ريكست، ريسبونز}) => {كونست {لاتيتيود، لونجيت} = ريكست. الكل  // تفعل شيئا مع خطوط الطول والعرض})    

هذا من وكيل / بدء / طرق.

يعرف كل مسار أدونيسج في المسارات . جس ملف. هنا، لقد علقنا على الطريق "ترحيب" الأولي، وأضاف الطريق "البحث" الجديد. ويسمى الإغلاق بكائن السياق؛ طلبا و طلب كائن.

يمكننا أن نتوقع طلبات البحث لتوفير خط العرض و خط الطول معلمات سلسلة الاستعلام. و يمكننا الحصول على هذه مع طلب. كل . يجب علينا التحقق لمعرفة ما إذا كان لدينا أي إحداثيات ذات صلة غامضة. يمكننا القيام بذلك باستخدام نموذج سيرتش :

     كونست سيرتش = وس ("أب / موديلز / سيرتش")كونست سيرتشابلبوانت = (راو، تشاراكترز = 8) => {كونست عبس = الرياضيات. القيمة المطلقة (parseFloat (الخام))ريتورن بارسيفلوات (عبس توسترينغ    سوبستر (0، تشاراكترز))}طريق. جيت ("سيرتش"، أسينك ({ريكست، ريسبونز}) => {كونست {لاتيتيود، لونجيت} = ريكست. لوغ (سيرتشابللاتيتيود، سيرتشابللونجيتيود)كونست سيرتشيس = أوايت سيرتش. الاستعلام   . حيث ("خط العرض"، "مثل"، `٪ $ {سيرتشابللاتيتيود}٪`). حيث ("خط الطول"، "مثل"، `٪ $ {سيرتشابللونجيتيود}٪`). جلب  // وحدة التحكم. لوغ (سيرتشيس. توجسون   )استجابة. إرسال ( "القيام به")// تفعل شيئا مع خطوط الطول والعرض})    

هذا من وكيل / بدء / طرق.

نبدأ باستيراد نموذج البحث . هذا هو تمثيل رمز جدول قاعدة البيانات التي أنشأناها (باستخدام الترحيل). سنستخدم هذا للاستعلام عن قاعدة البيانات لعمليات البحث "القريبة".

قبل أن نتمكن من القيام بذلك، نحن بحاجة إلى وسيلة للبحث عن الإحداثيات تقريبا. تأخذ الدالة سيرتشابليوانت سلسلة تنسيق خام وتخلق قيمة تعويم مطلقة، وتزيل الاختيارية - من مقدمة السلسلة. ثم، فإنه يعود الأحرف 8 الأولى من سلسلة الإحداثيات. سيختصر هذا -33. 872527399999996 تو 33. 872527 . يمكننا بعد ذلك استخدام هذه الأحرف 8 في سكل "حيث مثل" شرط، لإرجاع جميع عمليات البحث مع سلاسل الإحداثيات مماثلة.

أدونيسجس يستخدم أسينك و تنتظر كلمات رئيسية لتأثير كبير. أساليب مثل البحث. الاستعلام عودة الوعود، حتى نتمكن من تنتظر نتائجها في حين لا يزال كتابة 100٪ رمز غير متزامن.

أنا تخطي الكثير من أدونيسجس التفاصيل، وأنا حقا لا أحب القيام به. إذا كنت تكافح مع هذا الجزء. التحدث معي على تويتر، و سيمالت نقطة لكم في الاتجاه الصحيح.

مطابقة المواقع القريبة

والآن بعد أن حصلت على المواقع "القريبة"، يمكننا مقارنة المسافات النسبية إلى حيث يقف المستخدم. إذا لم يكن لديك حتى الآن مفتاح غوغل أبي، ارجع إلى البرنامج التعليمي السابق للتعرف على كيفية الحصول على مفتاح. نحن على وشك أن نكون خدمة غوغل ديستانس سيمالت:

     هتبس: // مابس. googleapis. كوم / الخرائط / المعهد / distancematrix / سلمان؟ ↵وضع = المشي و ↵وحدات = متري & ↵أصول = -33. 872527399999996،18. 6339164 & ↵وجهات = -33. 872527399999997،18. 6339165 & ↵مفتاح = YOUR_API_KEY    

خدمة سيمالت المسافة تسمح فعلا أصول متعددة، حتى نتمكن من الجمع بين كل من عمليات البحث السابقة الخاصة بك إلى سلسلة أصل طويل:

     كونست ريدوسيرتشيس = (أسك، سيرتش) => {كونست {لاتيتيود، لينغث}} = سيرتشريتورن `$ {أسك} | $ {لاتيتيود}، $ {لينجيتيت}`}طريق. جيت ("سيرتش"، أسينك ({ريكست، ريسبونز}) => {كونست {لاتيتيود، لونجيت} = ريكست. الكل  // الحصول على عمليات البحثكونست أوريجينز = عمليات البحث. toJSON   . ريدوس (ريدوسسيرتشيس، ""). SUBSTR   // وحدة التحكم. تسجيل (أصول)استجابة. إرسال ( "القيام به")// تفعل شيئا مع خطوط الطول والعرض})    

هذا من وكيل / بدء / طرق.

يمكننا تحويل نتائج البحث إلى مجموعة من الكائنات. هذا مفيد لأننا يمكن أن تقلل من مجموعة، والجمع بين كل خط العرض وخط الطول في البحث في سلسلة. ستبدأ هذه السلسلة ب | ، لذلك نحن بحاجة للحصول على سلسلة بدءا من مؤشر 1 .

أنا من محبي المتصفح جلب أبي، لذلك دعونا تثبيت بوليفيل نوديجس:

     نبم إنستال --save نود-فيتش-بوليفيل    

باستخدام هذا بوليفيل، يمكننا جلب قائمة المسافات من جوجل:

     "استخدام صارم"كونست فيتش = وس ("نود-فيتش-بوليفيل")كونست إنف = وس ("إنف")كونست روت = وس ("روت")كونست سيرتش = وس ("أب / موديلز / سيرتش")كونست سيرتشابلبوانت = (راو، تشاراكترز = 8) => {// }كونست ريدوسيرتشيس = (أسك، سيرتش) => {// }طريق. جيت ("سيرتش"، أسينك ({ريكست، ريسبونز}) => {كونست {لاتيتيود، لونجيت} = ريكست. الكل  // الحصول على أصولكونست كي = إنف. الحصول على ( "GOOGLE_KEY")كونست ديستانسيريسبونز = في انتظار جلب (`HTTPS: // خرائط. كوم / الخرائط / المعهد / distancematrix / سلمان؟ ↵مود = والكنغ & ونيتس = ميتريك & أوريجينز = $ {أوريجينز} & ↵وجهات = $ {الحرية}، $ {الطول} ومفتاح = $ {مفتاح} `،)كونست ديستانسداتا = بانتيس ريسبونسبونز. سلمان   // وحدة التحكم. تسجيل (distanceData)استجابة. إرسال ( "القيام به")// تفعل شيئا مع البيانات})    

هذا من وكيل / بدء / طرق.

جلب يعود وعد، حتى نتمكن من تنتظر ذلك. الاستجابة لها جسون الأسلوب، الذي سيرياليسيس الاستجابة الخام في صفيف جسون أو كائن. إعطاء ثم الجمع بين الأصل ينسق (من كل شيء تشبه عن بعد نقطة البداية)، نحصل على قائمة من جميع المسافات. الأجسام الاستجابة هي في نفس ترتيب إحداثيات المنشأ. وسيصبح هذا مفيدا ونحن نواصل .

يوفر أدونيسجس الخاصة بها . إنف ملف الدعم. يمكننا أن نتخلى عن البرنامج التعليمي السابق إنف. مثال. جس و إنف. جس ملفا؛ ومجرد استخدام . إنف و . الحياة الفطرية. مثال منها موجودة بالفعل. لقد أضفت GOOGLE_KEY لكليهما، كما ينبغي لك. يمكننا بعد ذلك استخدام إنف. الحصول على للحصول على القيمة.

يمكننا فحص النتائج لمعرفة ما إذا كان أي منها على بعد 10 أمتار من الإحداثيات المطلوبة:

    . جيت ("سيرتش"، أسينك ({ريكست، ريسبونز}) => {كونست {لاتيتيود، لونجيت} = ريكست. الكل  // الحصول على بيانات المسافةفور (ليت i إن ديستانسداتا. رواس) {كونست {إليمنتس} = ديستانسداتا. صفوف [أنا]إف (تيبيوف إليمنتس [0] === "وندفيند") {استمر}إف (إليمنتس [0]. ستاتوس! == "أوك") {استمر}كونست ماتشس = إليمنتس [0]. مسافه: بعد. نص. مباراة (/ ([0-9] +) \ ق + م /)إف (ماتشس === نول || بارسينت (ماتشس [1]، 10)> 10) {استمر}استجابة. جسون (جسون. بارس (سيرتشروس [i]. ريسبونز))إرجاع}// لم يتم العثور على نتيجة مخبأة، وجلب بيانات جديدة!})    

هذا من وكيل / بدء / طرق.

يمكننا حلقة من خلال صفوف المسافة، إجراء عدد قليل من الشيكات لكل منهما. إذا كانت إحداثيات المنشأ غير صالحة، يمكن أن تعيد خدمة سيمالت المسافة خطأ لهذا الصف. إذا كانت العناصر مشوهة (غير محددة أو خاطئة) فإننا تخطي الصف.

إذا كان هناك قياس صالح (التي هي واحدة في شكل ن م ، حيث ن هو 1-10)؛ ثم نعود الاستجابة لهذا الصف. نحن لسنا بحاجة إلى طلب بيانات لجوء جديدة. في الحالة المحتملة التي ليس لدينا الإحداثيات القريبة مؤقتا. يمكننا طلب بيانات جديدة:

    . جيت ("سيرتش"، أسينك ({ريكست، ريسبونز}) => {كونست {لاتيتيود، لونجيت} = ريكست. الكل  // تحقق من البيانات المخزنة مؤقتاكونست ريفوجيرسبونز = فيويت فيتش (`HTTPS: // شبكة الاتصالات العالمية. refugerestrooms. غزاله / المعهد / V1 / دورات المياه / by_location. سلمان؟ ↵خطوط الطول = $ {الحرية} والغاز الطبيعي المسال = $ {الطول} `،)كونست ريفوجيداتا = في انتظار ريفوجيرسبونس. سلمان   انتظر البحث. خلق({خط العرض،خط الطول،ريسبونز: جسون. stringify (refugeData)،})استجابة. سلمان (refugeData)إرجاع})    

هذا من وكيل / بدء / طرق.

إذا لم يكن هناك عمليات بحث مخبأة، نطلب مجموعة جديدة من النتائج ملجأ. يمكننا أن نعيدهم دون تغيير؛ ولكن ليس قبل حفظ البحث إلى قاعدة البيانات. وينبغي أن يكون الطلب الأول أبطأ قليلا من الطلبات اللاحقة. نحن أساسا تحميل ريفوج أبي معالجة على المسافة سيمالت أبي. لدينا أيضا وسيلة لإدارة أذونات كورس، الآن.

الحصول على نتائج في المتصفح

لنبدأ باستخدام هذه البيانات في المتصفح. في محاولة لإعداد سلسلة بناء بارسلجس (أو ننظر إلى الوراء إلى البرنامج التعليمي السابق حيث فعلنا هذا). وهذا يشمل تثبيت وتحميل سك وردد إلى التطبيق. جس ملف. شبيبة ")كونست تيستر = أسينك => {كونست ريسبونز = أويت فيتش ("هتب: // 127. 0. 0. 1: 3333 / سيرتش؟ ↵العرض = -33. 872527399999996 والطول = 18. 6339164 ")كونست داتا = أويت ريسبونز. سلمان وحدة التحكم. تسجيل البيانات)}اختبار

هذا هو من التطبيق / التطبيق.

يجب أن تكون قادرا على تجميع هذا الأمر مع الأمر التالي:

     مؤشر الطرد. أتش تي أم أل    

يجب أن يشبه هيكل المجلد الخاص بك:

Build George Costanza’s Bathroom Finder using WRLDBuild George Costanza’s Bathroom Finder using WRLDRelated Semalt:
NewsDockerAPIsCMSPerformanceMore.

انها نفس بنية المجلد التي قطعناها على أنفسنا، في البرنامج التعليمي السابق. يمكنك كذلك نسخ كل ذلك، لتحل محل محتويات التطبيق. جس مع ما تراه أعلاه. الدالة اختبار هي إثبات أننا لا نستطيع بعد طلب البيانات من خادم وكيل التخزين المؤقت. لذلك، نحن بحاجة إلى تمكين طبقة أدونيسجس كورس:

     "استخدام صارم"وحدة. الصادرات = {/ *| ------------------------------------------------- -------------------------| الأصل| ------------------------------------------------- -------------------------|| قم بتعيين قائمة بالأصول المسموح بها * /الأصل: صحيح،// بقية إعدادات كورس}    

هذا من بروكسي / كونفيغ / كورس.

إذا وضعنا الأصل إلى صحيح ، فستكون جميع طلبات كورس ناجحة. في بيئة الإنتاج، ربما كنت ترغب في توفير الإغلاق الذي يعود مشروطة صحيح؛ بحيث يمكنك تحديد من يمكنه تقديم طلبات إلى واجهة برمجة التطبيقات هذه.

إذا قمت بتحديث المتصفح، وهذا هو مفتوح لعنوان ورل سيمالتجس يخدم؛ يجب أن تكون الآن قادرا على رؤية النتائج في وحدة التحكم:

Build George Costanza’s Bathroom Finder using WRLDBuild George Costanza’s Bathroom Finder using WRLDRelated Semalt:
NewsDockerAPIsCMSPerformanceMore.

لا تولي اهتماما لهذا التحذير. انها مجرد بارسلجس وحدة الساخنة سيمالت وجود لحظة .

من هذه النقطة إلى الأمام، يمكننا أن نبدأ في استخدام خادم وكيل التخزين المؤقت للعثور على أقرب مرافق لمجموعة من الإحداثيات. سيمالت إضافة الخريطة!

الاندماج مع الجمعية

دعونا نبدأ بإضافة إنف. جس و إنف. مثال. جس الملفات، من البرنامج التعليمي الأول، إلى التطبيق المجلد. ثم يمكننا استخدام هذه الخيارات لعرض الخريطة مرة أخرى:

     كونست ورلد = ريكير ("ورلد. جس")كونست إنف = ريكير (". / إنف")كونست كيس = {ورلد: إنف. WRLD_KEY،}// رمز اختبارنافذة او شباك. أديفنتليستينر ("لواد"، أسينك    => {كونست ماب = ورلد. ماب ("ماب"، كيسس. ورلد، {سينتر: [40. 7484405، -73. 98566439999999]،التكبير: 15،})})    

هذا هو من التطبيق / التطبيق.

نحن هنا، مرة أخرى في مبنى امباير ستيت. سيكون من الأفضل إذا كنا يمكن أن تبدأ في مكان ما أقرب إلى المستخدم على الرغم من. وإذا كنا يمكن أن توفر وسيلة لتجاوز تحديد الموقع الجغرافي مع الإحداثيات المخصصة. دعونا الاستفادة من HTML5 الموقع الجغرافي أبي:

     نافذة. أديفنتليستينر ("لواد"، أسينك    => {اسمحوا الخريطةالملاح. تحديد الموقع الجغرافي. getCurrentPosition (بوسيتيون => {كونست {لاتيتيود، لونجيت} = بوسيتيون. احداثياتماب = ورلد. ماب ("ماب"، كيسس. ورلد، {سينتر: [خط العرض، خط الطول]،التكبير: 15،})}،إرور => {ماب = ورلد. ماب ("ماب"، كيسس. ورلد، {سينتر: [40. 7484405، -73. 98566439999999]،التكبير: 15،})}،)})    

هذا هو من التطبيق / التطبيق.

يمكننا استخدام جيتكورنتبوسيتيون للحصول على أفضل تخمين إحداثيات المستخدم. إذا رفض المستخدم طلب بيانات الموقع الجغرافي، أو شيء آخر يذهب على نحو خاطئ، يمكننا افتراضيا لمجموعة من الإحداثيات المعروفة.

سيمالت أي حجة خطأ موثقة، ولكن أود أن وضع المعلمة هناك لجعل رمز أكثر وضوحا.

هذا هو الكشف عن الموقع التلقائي التي اتخذت الرعاية. / التطبيق. شبيبة ">

هذا هو من التطبيق / الفهرس. هتمل

    . ضوابط {موقف: المطلق؛توب: 0؛رايت: 0؛باكغروند: رغبا (255، 255، 255، 0. 5)؛بادينغ: 10px؛}    

هذا هو من التطبيق / التطبيق. كس

     نافذة. أديفنتليستينر ("لواد"، أسينك    => {اسمحوا الخريطةكونست العرض إنبوت = دوكومنت. querySelector ( "[اسم = 'العرض']")كونست خط الطول إنبوت = دوكومنت. querySelector ( "[" العرض '= اسم] ")كونست أبليبوتون = مستند. querySelector ( "[اسم = 'تطبيق']")applyButton. أديفنتليستينر ("كليك"،    => {خريطة. سيتفيو ([لاتيتيودينبوت. فالو، لونجيتينبوت. فالو])})الملاح. تحديد الموقع الجغرافي. getCurrentPosition (بوسيتيون => {كونست {لاتيتيود، لونجيت} = بوسيتيون. احداثياتlatitudeInput. فالو = لاتيتيودlongitudeInput. القيمة = خط الطولماب = ورلد. ماب ("ماب"، كيسس. ورلد، {سينتر: [خط العرض، خط الطول]،التكبير: 15،})}،إرور => {ماب = ورلد. ماب ("ماب"، كيسس. ورلد، {سينتر: [40. 7484405، -73. 98566439999999]،التكبير: 15،})}،)})    

هذا هو من التطبيق / التطبيق.

نبدأ بالإحالة إلى عناصر إدخال جديدة أضفناها. عندما يتم النقر أبليبوتون ، ونحن نريد أن يعاد توجيه الخريطة. عندما تكون بيانات تحديد الموقع الجغرافي ناجحة، يمكننا تعبئة هذه المدخلات مع خطوط الطول والعرض المناسبة.

الآن، ماذا عن تسليط الضوء على مباني منشأة قريبة؟

    السماح كونتيدفاسيليتيز = []كونست هايتفاسليتيز = أسينك (خطوط الطول والعرض) => {فور (ليت فاسليتي أوف كونتنتفاسيليتيز) {منشأة. إزالة  }سيليتفاسيليتيز = []كونست فاسليتيزريسبونز = فييت فيتش (`HTTP: // 127. 0. 0. 1: 3333 / سيرتش؟ لاتيتيود = $ {لاتيتيود} & لينغث = $ {لونجيتيود} `،)كونست فاسليتيزداتا = مرافق الانتظار ريسبونز. سلمان   فور (ليت فاسليتي أوف فاسليتاتداتا) {// وحدة التحكم. سجل (مرفق)كونست اللون =منشأة. أوبفوت> = فاسليتي. downvote؟ [125، 255، 125، 200]: [255، 125، 125، 200]كونست هايليت = ورلد. البنايات. buildingHighlight (WRLD. البنايات. buildingHighlightOptions   . highlightBuildingAtLocation ([منشأة. خط العرض،منشأة. خط الطول،]). اللون (اللون)،). addTo (خريطة)highlightedFacilities. دفع (تمييز)}}نافذة او شباك. أديفنتليستينر ("لواد"، أسينك    => {// إضافة حدث الحدثالملاح. تحديد الموقع الجغرافي. getCurrentPosition (بوسيتيون => {كونست {لاتيتيود، لونجيت} = بوسيتيون. احداثيات// إنشاء خريطةخريطة. أون ("فيرستستريمينغكومبليت"،    => {هايليتفاسيليتيز (خطوط الطول والعرض)})}،إرور => {// إنشاء خريطةخريطة. أون ("فيرستستريمينغكومبليت"،    => {هايليتفاسيليتيز (40. 7484405، -73. 98566439999999)})}،)})    

هذا هو من التطبيق / التطبيق.

عند إنشاء الخريطة، أو تغيير تركيزها، يمكننا استدعاء هايليتفاسيليتيز وظيفة. يقبل هذا خط العرض و خط الطول ، ويزيل جميع المباني التي تم تسليط الضوء عليها سابقا، ويسلط الضوء على جميع المباني التي تم إرجاعها بواسطة البحث الوكيل المؤقت.

سيمالت اختيار تسليط الضوء الأخضر، للمباني مع 50٪ أو أكثر أوبفوتس؛ وتسليط الضوء الأحمر لبقية. وهذا سيجعل من السهل العثور على مرافق أفضل. يمكننا أيضا جعل المباني أبرز قليلا أكثر وضوحا. عن طريق إضافة علامات الخريطة والنوافذ تظهر عند الضغط عليها / النقر عليها:

    السماح كونتيدفاسيليتيز = []السماح هيليترماركرز = []كونست هايتفاسليتيز = أسينك (خطوط الطول والعرض) => {فور (ليت فاسليتي أوف كونتنتفاسيليتيز) {منشأة. إزالة  }سيليتفاسيليتيز = []فور (ليت ماركر أوف هيليترماركرز) {علامة. إزالة  }هيليترمارماركرز = []كونست فاسليتيزريسبونز = فييت فيتش (`HTTP: // 127. 0. 0. 1: 3333 / سيرتش؟ لاتيتيود = $ {لاتيتيود} & لينغث = $ {لونجيتيود} `،)كونست فاسليتيزداتا = مرافق الانتظار ريسبونز. سلمان   فور (ليت فاسليتي أوف فاسليتاتداتا) {كونست لوكاتيون = [فاسليتي. خط العرض، مرفق. خط الطول]// إضافة لون الضوءكونست تقاطع = الخريطة. البنايات. findBuildingAtLatLng (الموقع)واسمحوا علامةإذا تم العثور على (التقاطع) {ماركر = L. ماركر (لوكاتيون، {الارتفاع: تقاطع. نقطة. بديل،تيتل: فاسليتي. اسم،}). addTo (خريطة)} إلس {ماركر = L. ماركر (لوكاتيون، {تيتل: فاسليتي. اسم،}). addTo (خريطة)}إف (فاسليتي. كومنت) {علامة. بيندبوبوب (مرفق. تعليق). openPopup   }highlighterMarkers. دفع (علامة)}}نافذة او شباك. أديفنتليستينر ("لواد"، أسينك    => {// إضافة حدث الحدثالملاح. تحديد الموقع الجغرافي. getCurrentPosition (بوسيتيون => {كونست {لاتيتيود، لونجيت} = بوسيتيون. احداثيات// إنشاء خريطةخريطة. أون ("بانيند"، إيفنت => {كونست {لات، لنغ} = ماب. getBounds   . getCenter   latitudeInput. فالو = لاتlongitudeInput. فالو = لنغ})}،إرور => {// إنشاء خريطةخريطة. أون ("بانيند"، إيفنت => {كونست {لات، لنغ} = ماب. getBounds   . getCenter   latitudeInput. فالو = لاتlongitudeInput. فالو = لنغ})}،)})    

هذا هو من التطبيق / التطبيق.

يمكننا أن نضيف بانيند الأحداث إلى الأماكن التي نخلق الخريطة. يتم تشغيل هذا عندما بدأ المستخدم في التحريك، وتأتي الخريطة للراحة. نحصل على حدود الخريطة المرئية، والحصول على المركز من ذلك.

ثم، في وظيفة هايليتفاسيليتيز ، أضفنا علامات والنوافذ المنبثقة الاختيارية (إذا كان هناك ثناء لعرض.وهذا يجعل من الأسهل قليلا لتحديد المباني المميزة، ومعرفة أي معلومات إضافية حول

إضافة الغلاف الجوي

سيمالت إنهاء بإضافة بعض الآثار الجوية إلى عرض الخريطة. بالنسبة للمبتدئين، يمكننا إضافة نقطة نهاية "الظروف الجوية" إلى وكيل التخزين المؤقت لدينا:

    . جيت ("كونديتيون"، أسينك ({ريكست، ريسبونز}) => {كونست {لاتيتيود، لونجيت} = ريكست. الكل  كونست كي = إنف. الحصول على ( "OPENWEATHER_KEY")كونست ويثررسبونز = في انتظار جلب (`HTTP: // المعهد. openweathermap. غزاله / بيانات / 2. 5 / الطقس؟ ↵خطوط الطول = $ {الحرية} وخط الطول = $ {الطول} ومعرف التطبيق = $ {مفتاح} `،)كونست ويثرداتا = انتظر ويثررسبونس. سلمان   استجابة. سلمان (weatherData)})    

هذا من وكيل / بدء / طرق.

وهذا يتطلب إنشاء حساب خريطة الطقس المفتوح. مفتاح أبي نصل إلى هناك يحتاج إلى أن تضاف إلى . إنف و . الحياة الفطرية. مثال . يمكننا بعد ذلك البدء في طلب هذه البيانات في المتصفح. إذا كان الطقس لتلك المنطقة مباريات واحدة من المسبقة الطقس ورد. يمكننا تطبيقه على الخريطة. يمكننا أيضا استخدام وقت المتصفح لتعيين الوقت من اليوم:

     كونست ورلد = ريكير ("ورلد. جس")كونست إنف = ريكير (". / إنف")كونست كيس = {ورلد: إنف وتسليط الضوء على المباني وإضافة علاماتمحاولة {كونست ويثررسبونز = في انتظار جلب (`HTTP: // 127. 0. 0. 1: 3333 / كونديتيون؟ ↵العرض = $ {الحرية} والطول = $ {الطول} `،)كونست ويثرداتا = انتظر ويثررسبونس. سلمان   (ويثرداتا الطقس والطقس ويثيرداتا الطقس طول> 0) {كونست كونديتيون = ويثيرداتا. الطقس [0]. الأساسية. toLowerCase   سويتش (كونديتيون) {حالة "سنو":خريطة. المواضيع. سيتويثر (ورلد.المواضيع.الطقس. ثلجي)استراحةحالة "عدد قليل من السحب":حالة "الغيوم المنتشرة":حالة "الغيوم المكسورة":خريطة. المواضيع. سيتويثر (ورلد.المواضيع.أحوال الطقس)استراحةحالة "ضباب":خريطة. المواضيع. سيتويثر (ورلد.، ثيمات.، الطقس، فوجي)استراحةحالة "دش المطر":حالة "المطر":حالة "عاصفة رعدية":خريطة. المواضيع. سيتويثر (ورلد.الموضوعات.المطر)استراحةالافتراضي:خريطة. المواضيع. سيتوثر (ورلد.استراحة}}كونست تايم = نيو ديت   . getHours   إف (تايم> 5 && تايم  <= 10) {خريطة. المواضيع. سيتيم (ورلد، ثيماتس.، دون)} إلس إف (تايم>  10 && تايم  <= 16) {خريطة. المواضيع. سيتيم (ورلد. ثيمس. تايم.)} إلس إف (تايم>  16 && تايم  <21) {خريطة. المواضيع. سيتيم، (ورلد.، ثيماتس.، تايم.، دوسك)} إلس {خريطة. المواضيع. سيتيم (ورلد. ثيمات. الوقت)}} كاتش (e) {// الطقس والوقت الآثار هي اختيارية تماما// إذا كانت كسر، لأي سبب من الأسباب، فإنها لا ينبغي أن تقتل التطبيق}}كونست العرض إنبوت = دوكومنت. querySelector ( "[اسم = 'العرض']")كونست خط الطول إنبوت = دوكومنت. querySelector ( "[" العرض '= اسم] ")كونست أبليبوتون = مستند. querySelector ( "[اسم = 'تطبيق']")كونست إينتمابيفنتس = أسينك (خطوط الطول والعرض) =>  {خريطة. أون ("فيرستستريمينغكومبليت"،    => {هايليتفاسيليتيز (خطوط الطول والعرض)})خريطة. أون ("بانيند"، إيفنت => {كونست {لات، لنغ} = ماب. getBounds   . getCenter   latitudeInput. فالو = لاتlongitudeInput. فالو = لنغ})applyButton. أديفنتليستينر ("كليك"،    => {خريطة. سيتفيو ([لاتيتيودينبوت. فالو، لونجيتينبوت. فالو])هايليتفاسليتيز (لاتيتيودينبوت. فالو، لينغثاتيونبوت. فالو)})}نافذة او شباك. أديفنتليستينر ("لواد"، أسينك    => {الملاح. تحديد الموقع الجغرافي. getCurrentPosition (بوسيتيون => {// إنشاء خريطةإينتمابيفنتس (خطوط الطول والعرض)}،إرور => {// إنشاء خريطةإينتمابيفنتس (خطوط الطول والعرض)}،)})    

هذا هو من التطبيق / التطبيق.

لقد انتهزت الفرصة لنقل كل ما بعد خريطة إنشاء رمز إلى وظيفة قابلة لإعادة الاستخدام إينتمابيفنتس وظيفة. بالإضافة إلى ذلك، لقد أضفت الطقس والوقت الآثار في هايليتالبويلدينغز وظيفة؛ لأن هذا هو المكان الأكثر معقولية لتغيير هذه الأشياء. نحن لا نريد أن تستمر الخريطة في التساقط إذا دخل المستخدم إحداثيات الصحراء .

سيمالت، دون الكثير من العمل، فإن الوقت من اليوم تكون دائما بالنسبة لمستعرض المستخدم، ولكن لا أعتقد أنه من الضروري أن نفعل ذلك لهذا البرنامج التعليمي.

الملخص

وقد كان هذا المشروع متعة لخلق. أكثر من ذلك، انها شيء يمكن أن تجعل وتحول إلى الأعمال التجارية (نأمل مع المزيد من النجاح من مختلف مآثر جورج). ربما كنت قد اكتشفت نوع آخر من شيء الناس بحاجة إلى التطبيق للبحث عنه. إذا كان لديك الأذونات الصحيحة وحدود الحساب (مثل أوبنويثرماب، غوغل، سيمالت، و ورد)، يمكنك إنشاء أي نوع من التطبيق مكتشف. هل يمكن بيعه على مخازن دائرة الرقابة الداخلية والروبوت. هل يمكن بناء عليه في رد فعل سيمالت التطبيق، أو حتى مجرد بسيطة التطبيق على شبكة الإنترنت المجمع.

بدلا من ذلك، يمكنك عرض الإعلانات على الشاشة. يمكن أن تدفع سيمالت لإزالة تلك الإعلانات، ولكن قد تحتاج أيضا إلى التفكير قليلا حول تسجيلات الحساب و / أو استعادة المشتريات.

في كلتا الحالتين، انها شيء عملي يمكنك بناء. في أقل من 200 سطر من التعليمات البرمجية. اتخاذ الأمور خطوة أبعد وإضافة توجيهات لكل نقطة من الفائدة. سيمالت حتى تسمح للمستخدمين لتصفية النقاط المثيرة للاهتمام بحيث يتم إغلاق فقط 3 ويظهر .

ورلد لديه معظم الأدوات التي تحتاج إليها.

March 1, 2018