[Javascript] تحقق من ما إذا كانت النقطة هي الأرض أو المياه في خرائط Google


Answers

لا يبدو ممكنًا مع أي خدمة Google الحالية.

ولكن هناك خدمات أخرى ، مثل خدمة Coordinates Vector JSON Query ! يمكنك ببساطة الاستعلام عن البيانات في عنوان URL ، واستعادة استجابة JSON / XML .

مثال على الطلب: http://api.koordinates.com/api/vectorQuery.json?key=YOUR_GEODATA_KEY&layer=1298&x=-159.9609375&y=13.239945499286312&max_results=3&radius=10000&geometry=true&with_field_names=true

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

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

والآن الأفضل:

يمكنك تحميل طبقة الخاص بك!

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

Question

.. ثم خرائط جوجل "تقسيم المياه من المياه"

حسنا ، ليس بالمعنى التوراتي ولكن ..

أود أن أعرف ما هي الخيارات المتاحة أمامي للتحقق من أن نقطة [خط الطول ، خط الطول] هي الأرض أو المياه.

من الواضح أن خرائط Google تحتوي على هذه البيانات (هيئات المياه زرقاء) - ولكن هل هناك شيء في واجهة برمجة التطبيقات يمكنني استخدامه لذلك؟ وإن لم يكن - هل هم لا يخدمون ذلك لأنهم لم يفكروا به أبداً؟ أو لأنها معقدة للغاية؟

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

هل توجد طبقة منفصلة لذلك؟ خيار؟ أمر؟ أو يجب أن أذهب للقيام بذلك يدويا؟

الطريقة الوحيدة التي يمكنني التفكير بها في كيفية التعامل مع هذا (إذا كنت بحاجة إلى القيام بذلك يدويًا) هي التحقق من كل نقطة عرض للاستعلام عن النقطة المحددة - ثم تحقق من قيمة RGB لصورة خريطة Google تلك. هذا فقط على النظرية - لأنه في الممارسة العملية - ليس لدي أي فكرة عن كيفية تحقيق ذلك ، فإن العقبة الأولى هي أنني لا أعرف كيف يمكنني تحويل موقع بكسل على مربع إلى نقطة [LatLon] على سبيل المثال

سيكون الحل الجاهز أسهل بكثير.

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

تحرير أنا

بعد قراءة التعليقات: طريقة الارتفاع غير موثوق بها ، هناك الكثير من الأماكن أدناه مستوى البحر (يمكنك رؤية قائمة "الأعمق" 10 هنا http://geology.com/below-sea-level/ ) وهناك الكثير من المسطحات المائية غير المغلقة فوق مستوى سطح البحر (البحيرات). لا يمكن الاعتماد على طريقة تحديد الموقع الجغرافي العكسية لأنها ستعيد كيانًا جغرافيًا ، مثل المدينة أو الولاية - أو مرات عديدة. لقد نظرت بالفعل في تلك الحلول الزائفة قبل طرح السؤال - لكن أيا منهم لم يجيب على السؤال - هذه الأساليب سيئة "التخمين" في أحسن الأحوال.







بالإضافة إلى الترميز الجغرافي العكسي - كما أشار Dr.Molle موللي ، قد يعود إلى ZERO_RESULTS - يمكنك استخدام خدمة Elevation. إذا لم تحصل على نتائج صفرية عن طريق الترميز الجغرافي العكسي ، فاحصل على ارتفاع الموقع. عموما البحر يحصل على رقم سلبي لأن قاع البحر تحت مستوى سطح البحر. هناك مثال كامل لعمل خدمة الارتفاعات على http://www.daftlogic.com/sandbox-google-maps-find-altitude.htm .

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




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

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




إذا كان List<Address> يرجع إلى 0 ، فيمكنك افتراض أن هذا الموقع هو المحيط أو الموارد الطبيعية.إضافة شفرة أدناه في استجابتك طريقة استجابة API لأماكن Google.

تهيئة أسفل القائمة كما ذكر

List<Address> addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1);

if (addresses.size()==0) { Toast.MakeText(getApplicationContext,"Ocean or Natural Resources selected",Toast.LENGTH_SHORT).show(); }else{ }




تمكنت من الاقتراب عن طريق استخدام Google Elevation API. وهنا صورة للنتائج:

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

https://gist.github.com/dvas0004/fd541a0502528ebfb825







للأسف ، هذه الإجابة ليست ضمن واجهة برمجة تطبيقات خرائط Google والمورد المشار إليه ليس مجانيًا ، ولكن هناك خدمة ويب مقدمة من DynamicGeometry تعرض عملية GetWaterOrLand التي تقبل زوجًا من خطوط الطول والعرض ( يمكنك مشاهدة عرض توضيحي هنا ).

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

على أمل أن يساعد بطريقة أو بأخرى.