تحقق مما إذا كانت النقطة هي "أرض أو ماء" في خرائط غوغل [javascript]


Answers

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

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

طلب مثال: 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

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

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

والآن أفضل:

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

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

Question

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

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

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

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

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

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

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

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

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

إديت I

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







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

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




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

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




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

مثال على المياه: https://api.onwater.io/23.92323،-66.3

{
  lat: 23.92323,
  lon: -66.3,
  water: true
}

مثال على الأرض: https://api.onwater.io/42.35،-71.1

{
  lat: 42.35,
  lon: -71.1,
  water: false
}

الكشف الكامل أعمل في Dockwa.com ، الشركة وراء أونواتر. قمنا ببناء أونواتر لحل هذه المشكلة أنفسنا ومساعدة المجتمع. هو دائما حرة للاستخدام و أردنا أن حصة :)




إليك مثال آخر في جافا سكريبت النقي: http://jsfiddle.net/eUwMf/

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

$("#xGps, #yGps").change(function() {
    var img = document.getElementById('mapImg');

    // Bypass the security issue : drawing a canvas from an external URL.
    img.crossOrigin='anonymous';

    var xGps = $("#xGps").val();
    var yGps = $("#yGps").val();

    var mapUrl = "http://maps.googleapis.com/maps/api/staticmap?center=" + xGps + "," + yGps +
        "&zoom=14&size=20x20&maptype=roadmap&sensor=false";

    // mapUrl += "&key=" + key;

    $(img).attr("src", mapUrl);

    var canvas = $('<canvas/>')[0];
    canvas.width = img.width;
    canvas.height = img.height;
    canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);

    var pixelData = canvas.getContext('2d').getImageData(1, 1, 1, 1).data;

    if (pixelData[0] == 164 &&
        pixelData[1] == 190 &&
        pixelData[2] == 220) {
        $("#result").html("Water");
    } else {
        $("#result").html("Not water");
    }
});



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

ويمكن القيام بذلك عن طريق الثنائيات غدال، والمصدر C، أو عن طريق سويغ في جافا، بيثون، وأكثر من ذلك.

خرائط التعداد

معلومات غدال

مثال استعلام نقطة في بيثون




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

تهيئة القائمة أدناه كما ذكر

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{ }