सत्यापित करें कि कोई बिंदु Google मानचित्र में भूमि या जल है


106

..और फिर Google- नक्शे "पानी से पानी को विभाजित करते हैं"

वैसे, बाइबल की समझ में नहीं, लेकिन ..

मैं यह जानना चाहूंगा कि अगर [Lat, Lon] का एक बिंदु भूमि या जल है तो सत्यापित करने के लिए मेरे पास क्या विकल्प हैं।

Google मानचित्र में स्पष्ट रूप से यह डेटा है (पानी के शरीर नीले हैं) - लेकिन क्या एपीआई में ऐसा कुछ है जो मैं उसके लिए उपयोग कर सकता हूं? और यदि नहीं - तो क्या वे इसकी सेवा नहीं कर रहे हैं क्योंकि उन्होंने इसके बारे में कभी नहीं सोचा? या क्योंकि यह बहुत जटिल है?

मुझे इस मामले पर कोई जानकारी नहीं मिली है - यहाँ कुछ समान प्रश्नों को छोड़कर (जैसे कि इलाके का प्रकार, या ऊँचाई का पता लगाना - लेकिन यह वास्तव में मेरी ज़रूरत नहीं है)।

क्या इसके लिए अलग परत है? एक विकल्प? कमान? या मैं मैन्युअल रूप से ऐसा करने के लिए जाना चाहिए?

एकमात्र तरीका जो मैं सोच सकता हूं कि यह कैसे दृष्टिकोण किया जाए (क्या मुझे मैन्युअल रूप से ऐसा करने की आवश्यकता है) सटीक बिंदु के लिए प्रत्येक सेवा की गई टाइल की जांच करना है - और फिर उस Google मानचित्र के लिए RGB मान की जांच करें। यह केवल सिद्धांत पर है - क्योंकि व्यवहार में - मुझे पता नहीं है कि इसे कैसे पूरा किया जाए, पहली बाधा यह है कि मुझे नहीं पता कि मैं एक टाइल पर पिक्सेल स्थान को कैसे बदल सकता हूं [LatLon] उदाहरण के लिए बिंदु

एक तैयार समाधान बहुत आसान होगा।

ध्यान दें कि मुझे दुनिया में सभी पानी की आवश्यकता नहीं है (उदाहरण के लिए - मैं धाराओं, छोटे तालाबों, ज्यादातर नदियों या आपके पड़ोसी के स्विमिंग पूल की परवाह नहीं करता हूं। मुझे उन बिंदुओं की आवश्यकता है जहां एक व्यक्ति एक अस्थायी वाहन की सहायता के बिना उद्यम कर सकता है। )

संपादित करें I

टिप्पणियों को पढ़ने के बाद: ऊंचाई का तरीका विश्वसनीय नहीं है, बहुत से स्थान समुद्र तल से हैं (आप "गहरी" 10 की सूची यहां देख सकते हैं http://geology.com/below-sea-level/ ) और वहां बहुत से भूमि-बंद जल निकाय ABOVE समुद्र तल (झील) हैं। रिवर्स जियोलोकेशन विधि विश्वसनीय नहीं है क्योंकि यह शहर, या राज्य - या ZERO जैसी कई बार एक जियो-राजनीतिक इकाई लौटाएगा। मैंने सवाल पूछने से पहले ही उन छद्म समाधानों पर गौर किया है - लेकिन उनमें से किसी ने भी वास्तव में इस सवाल का जवाब नहीं दिया - उन तरीकों का सबसे अच्छा "अनुमान लगाना" है।


1
आप एलीवेशन लाइब्रेरी का उपयोग करने में सक्षम हो सकते हैं। हालांकि यह हमेशा सच नहीं होता है, मैं कल्पना करता हूं कि ज्यादातर समय समुद्र के पानी के स्तर पर चीजें होती हैं। कुछ स्पष्ट कोने के मामले हैं (डेथ वैली सीए, नीदरलैंड, पहाड़ों में झीलें, आदि), लेकिन यह किसी न किसी सन्निकटन के लिए काम कर सकता है।

धन्यवाद, मैंने पहले ही इसके बारे में सोचा है - लेकिन जैसा आपने बताया - पृथ्वी पर समुद्र तल से बहुत नीचे बिंदु हैं - उन सभी को छोड़कर एक व्यवहार्य समाधान नहीं है ..
ओबेरम क्रोनेन

@michael - आपके द्वारा उल्लिखित सभी भूमि-बंद जल-निकायों का उल्लेख नहीं करने के लिए .. (झीलें आदि ..)
ओम्बर्क क्रोनेन

शायद GIS.SE के लिए बेहतर है? बाउंटी समाप्त होने पर आप माइग्रेट कर सकते हैं।
टीएमएस

आप इस सवाल का जवाब प्राप्त हुआ है के रूप में, मैं, उस पर कुछ नहीं कहना है .. लेकिन यदि पानी डेटा, या जीआईएस जानकारी के लिए देख, अच्छी तरह से नहीं है एक अलग discussiong हमारे अलग डोमेन पर चल रहा http://gis.stackexchange.com/ यहाँ , आपको पानी के डेटा सहित कई आवश्यक
चीजें मिलेंगी

जवाबों:


55

ये 2 अलग-अलग तरीके हैं, आप कोशिश कर सकते हैं:

  • आप Google मैप्स रिवर्स जियोकोडिंग का उपयोग कर सकते हैं । परिणाम सेट में आप यह निर्धारित कर सकते हैं कि यह जाँच कर पानी है या नहीं types। पानी के मामले में प्रकार है natural_feature। इस लिंक पर अधिक देखें http://code.google.com/apis/maps/documentation/geocoding/#Types

    साथ ही आपको विशेषताओं के नामों की जांच करने की आवश्यकता है, अगर उनमें Sea, Lake, Oceanअधिक सटीकता के लिए पानी से संबंधित और कुछ अन्य शब्द हैं। उदाहरण के लिए रेगिस्तान भी हैं natural_feature

    पेशेवरों - सभी का पता लगाने की प्रक्रिया ग्राहक की मशीन पर की जाएगी। स्वयं की सर्वर साइड सेवा बनाने की कोई आवश्यकता नहीं है।

    विपक्ष - बहुत गलत और संभावना है कि आपको पानी में "कोई नहीं" मिलेगा बहुत अधिक है।

  • आप Google स्टेटिक मैप का उपयोग करके पिक्सेल द्वारा पानी / भूमि का पता लगा सकते हैं । लेकिन इस काम के लिए आपको http सर्विस बनानी होगी।

    ये वो कदम हैं, जिनकी सेवा आपको अवश्य करनी चाहिए:

    1. प्राप्त करें latitude, longitudeऔर current zoomक्लाइंट से।
    2. Google http://maps.googleapis.com/maps/api/staticmap?center={अक्षांश मानचित्र सेवा के लिए अक्षांश ,देशांतर }&zoom={वर्तमान ज़ूम `} और आकार = 1x1 & maptype = रोडमैप और सेंसर = गलत अनुरोध भेजें ।
    3. 1x1 स्थिर छवि के पिक्सेल रंग का पता लगाएं।
    4. पता लगाने के बारे में एक जानकारी का जवाब दें।

    आप क्लाइंट साइड में पिक्सेल के रंग का पता नहीं लगा सकते। हां, आप क्लाइंट की मशीन पर स्थिर छवि को लोड कर सकते हैं और canvasतत्व पर छवि बना सकते हैं । लेकिन आप getImageDataपिक्सेल के रंग प्राप्त करने के लिए कैनवास के संदर्भ का उपयोग नहीं कर सकते । यह क्रॉस डोमेन पॉलिसी द्वारा प्रतिबंधित है।

    Prons - अत्यधिक सटीक पहचान

    विपक्ष - पता लगाने के लिए स्वयं के सर्वर संसाधनों का उपयोग


2
धन्यवाद - मैंने पहले ही इसकी जांच कर ली है - मुझे नहीं पता था कि प्रकार सागर झील महासागर और पसंद को बदल रहे हैं, और जैसा कि आपने अपने संपादन में बताया है - natural_feature भी एक पहाड़, एक द्वीप और एक रेगिस्तान होगा .. क्या आप हो सकते हैं एक दस्तावेज की ओर इशारा करते हैं? यह भी - आप बिना पते के स्थानों के लिए रिवर्स जियोकोडिंग कैसे कर सकते हैं? और एक झील के बारे में क्या है जो एक भू-राजनीतिक इकाई का एक हिस्सा है? एक झील की तरह एक शहर या नगर पालिका की सीमा (उदाहरण के लिए जीनव्रे) या बस एक बिंदु जो एक शहर बंदरगाह है INSIDE। मेरे परीक्षणों में मैं ऐसा करने में
विफल

3
दुनिया के अधिकांश पानी के लिए एक रिवर्स जियोकोडिंग "शून्य परिणाम" लौटाएगा, जियोकोडिंग-टूल की जाँच करें: gmaps-samples-v3.googlecode.com/svn/trunk/geocoder/… और एक महासागर के अंदर कहीं क्लिक करें।
डॉ। मोलले

@ टॉमास - ऐसा नहीं है कि मैं साथी "स्टैकर्स" के लिए असहनीय या गैर-जिम्मेदार बनना चाहता हूं - लेकिन शायद इसे वोट नहीं दिया जाता क्योंकि यह वैध / सटीक तरीका नहीं है?
ओम्बर्क क्रोनेन

3
प्रस्तावित तरीके से स्थैतिक मानचित्रों का उपयोग करना शायद शर्तों (10.1.1 (एच)) के उल्लंघन के लिए आयोजित किया जाएगा ।
एंड्रयू लीच

1
स्टैटिक मैप्स दृष्टिकोण के लिए, आप इसे स्टाइल डेवलपर्स के साथ कर सकते हैं । Googlemaps/documentation/ static-maps/…, लेकिन साथ ही सौरव से जुड़े लेख का उपयोग कर सकते हैं ।
मिगुएव

19

यह किसी भी वर्तमान Google सेवा के साथ संभव नहीं लगता है।

लेकिन अन्य सेवाएं भी हैं, जैसे कोऑर्डिनेट वेक्टर जेन्सन क्वेरी सेवा ! आप बस URL में डेटा को क्वेरी करते हैं, और आपको एक JSON / XML प्रतिक्रिया मिलती है

उदाहरण अनुरोध: http://api.koordinates.com/api/vectorQuery.json?key=YOUR_GEODATA_KEY&layer=1298&x=-159.9609375&y=13.239945433286312&max_results=3&radius=10000&geometry=true&with_field

आपको अपनी कुंजी और चयनित परत संख्या को पंजीकृत और आपूर्ति करना होगा। आप उपलब्ध परतों की उनकी सभी रिपॉजिटरी खोज सकते हैं । अधिकांश परतें केवल क्षेत्रीय हैं, लेकिन आप वर्ल्ड कोस्टलाइन की तरह वैश्विक भी पा सकते हैं :

यहां छवि विवरण दर्ज करें

जब आप एक परत का चयन करते हैं, तो आप "सेवा" टैब पर क्लिक करते हैं, आपको उदाहरण अनुरोध URL मिलता है। मेरा मानना ​​है कि आपको केवल पंजीकरण करने की आवश्यकता है और यह बात है!

और अब सबसे अच्छा:

आप अपनी परत अपलोड कर सकते हैं!

यह अभी उपलब्ध नहीं है, हे इसे किसी तरह संसाधित करना है, लेकिन यह काम करना चाहिए! परत रिपॉजिटरी वास्तव में ऐसा लगता है कि लोगों ने उन्हें आवश्यकतानुसार अपलोड किया है।


यह लगभग सही लग रहा है, हालांकि मुझे कोई स्थानीय मानचित्र नहीं दिखता है जो ओशिनिया का नहीं है। क्या कोई अमेरिकी परतें हैं?
हेलवोवेस्टर

@HaloWebMaster जिस परत का मैंने उल्लेख किया है वह वैश्विक है। और आप क्षेत्र के आधार पर परतों को भी खोज सकते हैं।
टीएमएस

@HaloWebMaster मैंने अभी देखा कि आप अपनी खुद की परत अपलोड कर सकते हैं! मेरा अपडेट देखें।
TMS

अरे, टॉमस, मुझे नहीं पता कि आपको वास्तव में इनाम मिला है या नहीं (क्योंकि मैं एक सप्ताह के लिए ऑफ़लाइन था) लेकिन यह बहुत बढ़िया है! आपकी मदद के लिए धन्यवाद, मैं काम करने के लिए अपने आवेदन प्राप्त करने में सक्षम नहीं था। धन्यवाद! (यदि आपको इनाम नहीं मिला, तो मैं इसे सिर्फ पीएम बना
दूंगा

अरे, आपने मुझे कस्टम कोडिंग का एक सप्ताह बचा लिया! यह इसके लायक है!
हेलोवेबस्टर

8

यह जो मैं उपयोग करता हूं और यह बहुत बुरा काम नहीं कर रहा है ... यदि आप पिक्सेल जोड़कर अधिक सीपीयू बर्बाद करते हैं, तो आप परीक्षण में सुधार कर सकते हैं।

function isItWatter($lat,$lng) {

    $GMAPStaticUrl = "https://maps.googleapis.com/maps/api/staticmap?center=".$lat.",".$lng."&size=40x40&maptype=roadmap&sensor=false&zoom=12&key=YOURAPIKEY";  
    //echo $GMAPStaticUrl;
    $chuid = curl_init();
    curl_setopt($chuid, CURLOPT_URL, $GMAPStaticUrl);   
    curl_setopt($chuid, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($chuid, CURLOPT_SSL_VERIFYPEER, FALSE);
    $data = trim(curl_exec($chuid));
    curl_close($chuid);
    $image = imagecreatefromstring($data);

    // this is for debug to print the image
    ob_start();
    imagepng($image);
    $contents =  ob_get_contents();
    ob_end_clean();
    echo "<img src='data:image/png;base64,".base64_encode($contents)."' />";

    // here is the test : I only test 3 pixels ( enough to avoid rivers ... )
    $hexaColor = imagecolorat($image,0,0);
    $color_tran = imagecolorsforindex($image, $hexaColor);

    $hexaColor2 = imagecolorat($image,0,1);
    $color_tran2 = imagecolorsforindex($image, $hexaColor2);

    $hexaColor3 = imagecolorat($image,0,2);
    $color_tran3 = imagecolorsforindex($image, $hexaColor3);

    $red = $color_tran['red'] + $color_tran2['red'] + $color_tran3['red'];
    $green = $color_tran['green'] + $color_tran2['green'] + $color_tran3['green'];
    $blue = $color_tran['blue'] + $color_tran2['blue'] + $color_tran3['blue'];

    imagedestroy($image);
    var_dump($red,$green,$blue);
    //int(492) int(570) int(660) 
    if($red == 492 && $green == 570 && $blue == 660)
        return 1;
    else
        return 0;
}

कोड संस्करण; नए संस्करण पर काम नहीं कर रहा है। नया संस्करण इस तरह का होना चाहिए अगर ($ लाल == 537 && $ हरा == 627 && $ नीला == 765)
11 जनवरी को प्रिकिस्मा

8

एक मुफ्त वेब एपीआई है जो इस समस्या को हल करता है जिसे onwater.io कहा जाता है । यह Google मानचित्रों में निर्मित नहीं है, लेकिन एक अक्षांश और देशांतर दिया गया है और यह एक अनुरोध के माध्यम से सही या गलत वापस आ जाएगा।

पानी पर उदाहरण: https://api.onwater.io/api/v1/results/23.92323,-66.3

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

भूमि पर उदाहरण: https://api.onwater.io/api/v1/results/42.35,-71.1

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

पूर्ण प्रकटीकरण मैं Dockwa.com पर काम करता हूं , जो पानी के पीछे की कंपनी है। हमने इस समस्या को हल करने के लिए और समुदाय की मदद के लिए पानी का निर्माण किया। यह उपयोग करने के लिए स्वतंत्र है (उच्च मात्रा के लिए भुगतान) और हम साझा करना चाहते थे :)


1
अपडेट किया गया उदाहरण लिंक: जल उदाहरण: api.onwater.io/api/v1/results/23.92323,-66.3 भूमि उदाहरण: api.onwater.io/api/v1/results/42.35,-71.1
ईसाई लालकृष्ण

1
यह किसी भी अधिक (उच्च संस्करणों के लिए) मुफ्त नहीं है, लेकिन अगर यह काम करता है तो यह अभी भी बहुत सस्ती है!
क्रिश्चियन के।

प्रलेखन पृष्ठ एक त्रुटि देता है। मैं जांचना चाहता था कि क्या कोई कवरेज विशिष्ट डेटा था? मेरा मतलब है कि आप किन देशों को कवर करते हैं?
nr5

क्या onwater.io झीलों और नदियों के लिए काम करता है? यदि हां, तो क्या मुझे प्रकार का संकेत मिलता है?
लुकश

7

मुझे लगा कि इस क्वेरी को स्थानीय रूप से करना अधिक दिलचस्प है, इसलिए मैं अधिक आत्मनिर्भर हो सकता हूं: मान लीजिए कि मैं एक बार में 25000 यादृच्छिक भूमि निर्देशांक उत्पन्न करना चाहता हूं, मैं संभवतः बाहरी एपीआई को कॉल से बचना चाहता हूं। यहाँ इस पर मेरा शॉट है अजगर में, टॉमस्चबर्ट द्वारा उल्लिखित अजगर उदाहरण का उपयोग करते हुए । मूल रूप से यह एक पूर्व-निर्मित 350 एमबी फाइल पर निर्देशांक देखता है जिसमें सभी भूमि निर्देशांक होते हैं, और यदि निर्देशांक वहां मौजूद हैं, तो यह उन्हें प्रिंट करता है।

import ogr
from IPython import embed
import sys

drv = ogr.GetDriverByName('ESRI Shapefile') #We will load a shape file
ds_in = drv.Open("land_polygons.shp")    #Get the contents of the shape file
lyr_in = ds_in.GetLayer(0)    #Get the shape file's first layer

#Put the title of the field you are interested in here
idx_reg = lyr_in.GetLayerDefn().GetFieldIndex("P_Loc_Nm")

#If the latitude/longitude we're going to use is not in the projection
#of the shapefile, then we will get erroneous results.
#The following assumes that the latitude longitude is in WGS84
#This is identified by the number "4236", as in "EPSG:4326"
#We will create a transformation between this and the shapefile's
#project, whatever it may be
geo_ref = lyr_in.GetSpatialRef()
point_ref=ogr.osr.SpatialReference()
point_ref.ImportFromEPSG(4326)
ctran=ogr.osr.CoordinateTransformation(point_ref,geo_ref)

def check(lon, lat):
    #Transform incoming longitude/latitude to the shapefile's projection
    [lon,lat,z]=ctran.TransformPoint(lon,lat)

    #Create a point
    pt = ogr.Geometry(ogr.wkbPoint)
    pt.SetPoint_2D(0, lon, lat)

    #Set up a spatial filter such that the only features we see when we
    #loop through "lyr_in" are those which overlap the point defined above
    lyr_in.SetSpatialFilter(pt)

    #Loop through the overlapped features and display the field of interest
    for feat_in in lyr_in:
        # success!
        print lon, lat

check(-95,47)

मैंने एक दर्जन निर्देशांक की कोशिश की, यह आश्चर्यजनक रूप से काम करता है। "Land_polygons.shp" फ़ाइल को यहां डाउनलोड किया जा सकता है , OpenStreetMaps की तारीफ। (मैंने पहला WGS84 डाउनलोड लिंक खुद इस्तेमाल किया, शायद दूसरा काम भी करता है)


झीलों का क्या? क्या यह समुद्र या भूमि के रूप में झीलों पर अंक का संबंध है?
fatma.ekici 10

अच्छा प्रश्न! मैंने OpenStreetMaps डेटा के पृष्ठ पर जाँच की जो मेरे उत्तर में जुड़ा हुआ था , और यह कहता है कि भूमि फ़ाइल टैग पर इसके मूल्यों को आधार बनाती है natural=coastline। एक त्वरित googling इस पृष्ठ का उपयोग करता है जो विशेष रूप से बताता है कि समुद्र तट टैग वास्तव में उनके नामकरण में झीलों पर लागू नहीं होते हैं। तो मैं कहूंगा कि नहीं , मेरी विधि झीलों को पानी के रूप में नहीं पहचानती है, क्योंकि मैं जिस डेटासेट का उपयोग कर रहा हूं वह नहीं करता है। लेकिन यह अपने लिए कोशिश करो!
सिल्वेनबी

7

इस लेख को देखें । यह सही ढंग से पता लगाता है कि क्या सर्वर की आवश्यकता के बिना पानी पर कुछ है। यह एक हैक है जो Google मानचित्र में कस्टम स्टाइलिंग सुविधा पर निर्भर करता है।


5

रिवर्स जियोकोडिंग के अलावा - जैसा कि डॉ। मोले ने बताया है, यह ZERO_RESULTS को वापस कर सकता है - आप एलिवेशन सेवा का उपयोग कर सकते हैं। यदि आप रिवर्स जियोकोडिंग द्वारा शून्य परिणाम प्राप्त करते हैं, तो स्थान की ऊंचाई प्राप्त करें। आमतौर पर, समुद्र को एक नकारात्मक संख्या मिलती है क्योंकि समुद्र तल से समुद्र तल नीचे होता है। उन्नयन सेवा का पूरी तरह से काम करने वाला उदाहरण है।

ध्यान रखें कि Google इस जानकारी को किसी अन्य तरीके से उपलब्ध नहीं कराता है और यह केवल एक अनुमान है और अनुमान स्वाभाविक रूप से गलत हैं। हालाँकि type, रिवर्स जियोकोडिंग द्वारा लौटा का उपयोग करना , या यदि typeउपलब्ध नहीं है तो ऊंचाई , अधिकांश घटनाओं को कवर करेगा।


आपके उत्तर के लिए धन्यवाद और उदाहरण लिंक (BTW - यह मेरे लिए ओपेरा में काम नहीं कर रहा है) - लेकिन मैं वास्तव में उन सभी क्षेत्रों की उपेक्षा नहीं कर सकता जो भूमि और नकारात्मक हैं और मेरे प्रयोगों से पता चला है कि TYPE विश्वसनीय नहीं है - और कई बार रिटर्न भू-राजनीतिक इकाई के पास। कुछ और सटीक विधि होनी चाहिए - "अनुमान लगाना" यहाँ सही दृष्टिकोण नहीं लगता है। यदि TYPE विश्वसनीय था - यह सबसे अच्छा समाधान होता - लेकिन यह नहीं है ... और आप उन सभी भूमि-बंद जल निकायों की उपेक्षा कर रहे हैं जो ABOVE समुद्र तल हैं ...
Obmerk Kronen

3

यह विधि पूरी तरह से अविश्वसनीय है। वास्तव में, लौटा डेटा पूरी तरह से इस बात पर निर्भर करेगा कि आप दुनिया के किस हिस्से के साथ काम कर रहे हैं। उदाहरण के लिए, मैं फ्रांस में काम कर रहा हूं। यदि मैं फ्रांस के तट पर समुद्र पर क्लिक करता हूं, तो Google निकटतम LAND स्थान को वापस कर देगा, यह "अनुमान" कर सकता है। जब मैंने इसी प्रश्न के लिए Google से जानकारी का अनुरोध किया, तो उन्होंने उत्तर दिया कि वे उस पानी के द्रव्यमान पर अनुरोध किए गए बिंदु को ठीक से वापस करने में असमर्थ हैं।

बहुत संतोषजनक जवाब नहीं है, मुझे पता है। यह काफी निराशाजनक है, खासकर हममें से उन लोगों के लिए जो एक मार्कर स्थिति को परिभाषित करने के लिए उपयोगकर्ता को मानचित्र पर क्लिक करने की क्षमता प्रदान करते हैं।


1
मैं सहमत हूं - @1111426 और @Andrew द्वारा सुझाए गए तरीके वास्तव में विधियां नहीं हैं। उपयोगकर्ताओं को यह बताना बेहतर है "नीले क्षेत्रों पर क्लिक न करें" :-) लेकिन गंभीरता से - मुझे बहुत आश्चर्य है कि Google ऐसा फ़ंक्शन जारी नहीं करना चाहता है - भले ही अनुमानित - यह बेहतर है तो "सन्निकटन" अब मौजूद है - जैसे कि आप सूचक - कभी-कभी सैकड़ों मीटर दूर किसी स्थान पर "स्नैप" करते हैं। यहां तक ​​कि मेरी सुझाई गई विधि अधिक गंभीर है (बहुत बुरा मुझे पता नहीं है कि इसे कैसे पूरा किया जाए।)
ओबेरम क्रोनन

3

यदि बाकी सब विफल हो जाता है तो आप हमेशा बिंदु पर और कुछ दूरी के लिए ऊंचाई की जांच करने की कोशिश कर सकते हैं - पानी के अलावा कई चीजें पूरी तरह से सपाट नहीं होती हैं।


धन्यवाद, यह एक अच्छा विचार है, लेकिन यह हर झरने, या एक नदी घाटी पर शानदार ढंग से विफल हो जाएगा ...
ओबेरम क्रोनन

2

दुर्भाग्यवश यह उत्तर Google मैप्स API के भीतर नहीं है और संदर्भित संसाधन मुफ़्त नहीं है, लेकिन डायनेमिकगेटोमेट्री द्वारा प्रदान की गई एक वेब सेवा है GetWaterOrLandजो एक ऑपरेशन को उजागर करती है जो अक्षांश / देशांतर जोड़ी को स्वीकार करती है ( आप यहां डेमो देख सकते हैं )।

इसे कैसे लागू किया जाता है, इसकी मेरी समझ वाटर बॉडी शेप फ़ाइलों का उपयोग करके है। Google मैप्स API के साथ इन आकार की फ़ाइलों का उपयोग कैसे किया जाता है, लेकिन आप लिंक किए गए डेमो से कुछ जानकारी प्राप्त करने में सक्षम हो सकते हैं।

आशा है कि किसी तरह मदद करता है।


2

यहाँ शुद्ध जावास्क्रिप्ट में एक और उदाहरण दिया गया है: http://jsfiddle.net/eUwMf/

जैसा कि आप देख सकते हैं, आइडिया मूल रूप से rebe100x के समान है, Google स्थिर मानचित्र एपीआई से छवि प्राप्त कर रहा है, और पहला पिक्सेल पढ़ें:

$("#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");
    }
});

2

एक ऐसे ही सवाल का जवाब मैंने दिया - यह फ़ंक्शन को प्राप्त करने के लिए पृथ्वी आपी के "HIT_TEST_TERRAIN" का उपयोग करता है।

मेरे द्वारा यहां लगाए गए विचार का एक कार्यशील उदाहरण है: http://www.msa.mmu.ac.uk/~fraser/ge/coord/


2

मैं यहाँ अपना रोल बनाने की सलाह दूंगा। आप आकृति में एक बिंदु के तहत सामग्री को क्वेरी करने के लिए GDAL जैसे टूल का उपयोग कर सकते हैं । आप अमेरिकी जनगणना ब्यूरो सहित कई स्रोतों से अमेरिकी भूगोल के लिए आकार-प्रकार प्राप्त कर सकते हैं ।

यह GDAL बायनेरिज़, स्रोत C, या जावा, पायथन और अन्य में स्वाइप के माध्यम से किया जा सकता है।

जनगणना मैप्स

GDAL जानकारी

पाइथन में प्वाइंट क्वेरी उदाहरण


1

यहाँ एक सरल उपाय है

क्योंकि Google समुद्र या पानी के अंतर्देशीय निकायों पर ले जाने वाले निर्देशांक के संबंध में विश्वसनीय परिणाम प्रदान नहीं करता है, इसके लिए आपको एक अन्य बैकअप सेवा, जैसे कि Yandex का उपयोग करने की आवश्यकता होती है, वह महत्वपूर्ण जानकारी प्रदान करने में मदद करती है जब वह गायब होती है। आप सबसे अधिक संभावना है कि आप यैंडेक्स को अपने प्राथमिक जियोकोडर के रूप में उपयोग नहीं करना चाहेंगे, क्योंकि Google विश्व डेटा की विश्वसनीयता और पूर्णता में बहुत बेहतर है, हालांकि जब यह पानी के निकायों से समन्वय करता है, तो डेटा प्राप्त करने के उद्देश्य से यांडेक्स बहुत उपयोगी हो सकता है, इसलिए दोनों का उपयोग करें।


यैंडेक्स डॉक्यूमेंटेशन: https://api.yandex.com.tr/maps/doc/geocoder/desc/concepts/input_params.xml


महासागर के नाम को पुनः प्राप्त करने के लिए कदम:

1.) समन्वय को जियोकोड को उलटने के लिए पहले Google का उपयोग करें।

2.) यदि Google शून्य परिणाम देता है, तो यह 99% संभावना है कि समन्वय एक महासागर पर निहित है। अब यैंडेक्स के समान निर्देशांक के साथ एक माध्यमिक रिवर्स जियोकोडिंग अनुरोध करें। Yandex सटीक निर्देशांक के साथ एक JSON प्रतिक्रिया लौटाएगा, इस प्रतिक्रिया के भीतर दो "कुंजी" होंगे: महत्व के "मूल्य" जोड़े

["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["kind"]

and

["GeoObject"]["name"]

तरह की कुंजी देखें, अगर यह == "हाइड्रो" आप जानते हैं कि आप पानी के शरीर पर हैं, और क्योंकि Google ने शून्य परिणाम लौटाए हैं, यह 99.99% है संभावना है कि यह पानी का एक महासागर है। सागर का नाम उपरोक्त "नाम" कुंजी होगा।

यहाँ एक उदाहरण है कि मैं रूबी में लिखी इस रणनीति का उपयोग कैसे करता हूं

if result.data["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["kind"] == "hydro"
     ocean = result.data["GeoObject"]["name"] 
end

अंतर्देशीय जल के नाम को पुनः प्राप्त करने के लिए कदम:

इस उदाहरण के लिए मान लें कि हमारा समन्वय कहीं झील में है:

1.) समन्वय को जियोकोड को उलटने के लिए पहले Google का उपयोग करें।

2.) Google सबसे अधिक संभावना एक परिणाम देगा जो पास की भूमि पर एक प्रमुख डिफ़ॉल्ट पता है। इस परिणाम में यह उस पते के निर्देशांक की आपूर्ति करता है जो इसे लौटाया गया है, यह समन्वय आपके द्वारा प्रदत्त किसी से मेल नहीं खाएगा। आपके द्वारा आपूर्ति किए गए समन्वयन और परिणाम के साथ लौटी हुई दूरी के बीच की दूरी को मापें, यदि यह काफी भिन्न है (उदाहरण के लिए 100 गज) तो यैंडेक्स के साथ एक माध्यमिक बैकअप अनुरोध करें और "प्रकार" कुंजी का मान देखने के लिए जांचें, यदि यह "हाइड्रो" है तो आप जानते हैं कि पानी पर समन्वित झूठ है। क्योंकि Google ने ऊपर दिए गए उदाहरण के विपरीत एक परिणाम लौटाया, यह 99.99% होने की संभावना है कि यह पानी का अंतर्देशीय निकाय है इसलिए अब आप नाम प्राप्त कर सकते हैं। यदि "तरह" == "हाइड्रो" नहीं है, तो Google जियोकोडेड ऑब्जेक्ट का उपयोग करें।

["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["kind"]

and

["GeoObject"]["name"]

रूबी में अंतर्देशीय_बॉडी_ऑफ_वाटर पाने के लिए यहां एक ही कोड लिखा गया है

if result.data["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["kind"] == "hydro"
     inland_body_of_water = result.data["GeoObject"]["name"] 
end

लाइसेंसिंग के बारे में एक नोट: जहां तक ​​मुझे पता है कि Google आपको उन Google ऑफ़र के अलावा किसी अन्य नक्शे पर अपने डेटा का उपयोग करने की अनुमति नहीं देता है। यैंडेक्स में हालांकि बहुत लचीला लाइसेंस है, और आप उनके डेटा का उपयोग Google मानचित्र पर प्रदर्शित करने के लिए कर सकते हैं।

इसके अलावा यांडेक्स में 50,000 नि: शुल्क अनुरोध / दिन की उच्च दर सीमा है, और कोई आवश्यक एपीआई कुंजी नहीं है।


1

मैं Google एलिवेशन API का उपयोग करके काफी करीब आने में कामयाब रहा। यहाँ परिणामों की एक छवि है:

परिणामों का स्क्रीनशॉट

आप देख सकते हैं कि हेक्सागोन्स बहुत अधिक भूमि पर रहते हैं भले ही एक आयताकार परिधि को परिभाषित किया गया हो जो आंशिक रूप से पानी के ऊपर जाता है। इस मामले में मैंने स्वयं ही Google मैप्स से एक त्वरित जांच की और भूमि पर न्यूनतम ऊंचाई 8-9 मी थी, जो कि मेरी सीमा थी। यह कोड Google डॉक्यूमेंट और स्टैक ओवरफ्लो से ज्यादातर कॉपी / पेस्ट किया जाता है, यहां पूरी जानकारी दी गई है:

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


सिर्फ FYI करें, Google
एलीवेशन

2
यह संभव उपयोग का एक बड़ा उदाहरण है। लेकिन यह शानदार ढंग से पानी के लैंड-लॉक बॉडीज (लैगो डी गार्डा - इटली से जुड़े चित्र उदाहरण में) पर शानदार रूप से विफल हो जाएगा । बहुत अच्छा कोड एक और समाधान के लिए संभव आधार के रूप में इस्तेमाल किया जाना लगा!
ओमेरक क्रोनन जूल

1

यदि List<Address>पता 0 देता है, तो आप इस स्थान को महासागर या प्राकृतिक संसाधन मान सकते हैं। बस अपनी प्रतिक्रिया में नीचे कोड जोड़ें 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{ }


0

पायथन के लिए एक पूर्ण नौसिखिए के रूप में मैं सिल्वेनबी के समाधान को पायथन स्क्रिप्ट के साथ काम करने के लिए नहीं पा सका, जो यह जांचता है कि निर्देशांक जमीन पर हैं या नहीं। हालाँकि, मैंने OSGeo4W ( https://trac.osgeo.org/osgeo4w/ ) डाउनलोड करके यह पता लगाने में कामयाबी हासिल की और फिर मुझे पाइप, इफ्थॉन की जरूरत की सभी चीजें स्थापित कीं और जांच की कि इसमें निर्दिष्ट सभी आयात थे। मैंने निम्न कोड को .py फ़ाइल के रूप में सहेजा है।

निर्देशांक की जाँच करें कि क्या निर्देशांक भूमि पर हैं

###make sure you check these are there and working separately before using the .py file 

import ogr
from IPython import embed
from osgeo import osr
import osgeo

import random
#####generate a 1000 random coordinates
ran1= [random.uniform(-180,180) for x in range(1,1001)]
ran2= [random.uniform(-180,180) for x in range(1,1001)]


drv = ogr.GetDriverByName('ESRI Shapefile') #We will load a shape file
ds_in = drv.Open("D:\Downloads\land-polygons-complete-4326\land-polygons-complete-4326\land_polygons.shp")    #Get the contents of the shape file
lyr_in = ds_in.GetLayer(0)    #Get the shape file's first layer

#Put the title of the field you are interested in here
idx_reg = lyr_in.GetLayerDefn().GetFieldIndex("P_Loc_Nm")

#If the latitude/longitude we're going to use is not in the projection
#of the shapefile, then we will get erroneous results.
#The following assumes that the latitude longitude is in WGS84
#This is identified by the number "4236", as in "EPSG:4326"
#We will create a transformation between this and the shapefile's
#project, whatever it may be
geo_ref = lyr_in.GetSpatialRef()
point_ref=osgeo.osr.SpatialReference()
point_ref.ImportFromEPSG(4326)
ctran=osgeo.osr.CoordinateTransformation(point_ref,geo_ref)
###check if the random coordinates are on land
def check(runs):
    lon=ran1[runs]
    lat=ran2[runs]
    #Transform incoming longitude/latitude to the shapefile's projection
    [lon,lat,z]=ctran.TransformPoint(lon,lat)
    #Create a point
    pt = ogr.Geometry(ogr.wkbPoint)
    pt.SetPoint_2D(0, lon, lat)
    #Set up a spatial filter such that the only features we see when we
    #loop through "lyr_in" are those which overlap the point defined above
    lyr_in.SetSpatialFilter(pt)
    #Loop through the overlapped features and display the field of interest
    for feat_in in lyr_in:
        return(lon, lat)

###give it a try
result = [check(x) for x in range(1,11)] ###checks first 10 coordinates

मैंने इसे आर में काम करने के लिए प्राप्त करने की कोशिश की, लेकिन मुझे एक बुरा सपना था कि आपको उन सभी पैकेजों को प्राप्त करने की कोशिश करनी चाहिए जो आपको अजगर से चिपक गए थे।


-3

मेरा यहाँ एक अलग समाधान है। वर्तमान Google मानचित्र कार्यान्वयन में, यह जल स्थान से भूमि स्थान और इसके विपरीत दिशा / दूरी की गणना नहीं करता है। क्यों न हम इस तर्क का उपयोग यह निर्धारित करने के लिए करें कि बिंदु भूमि या पानी है।

उदाहरण के लिए यह उदाहरण देता है

अगर हम निर्धारित करना चाहते हैं, अगर एक बिंदु xभूमि या पानी है, तो

आइए हम बिंदु xऔर एक ज्ञात बिंदु के बीच की दिशा की जांच करें yजो भूमि है। यदि यह दिशा / दूरी निर्धारित करता है तो बिंदु xभूमि है या फिर यह पानी है।


क्या आपने वास्तव में इसकी कोशिश की है या आप केवल "पानी से खाना पकाने" को मान रहे हैं?
टीएमएस

और आप पुलों को संभालने के लिए कैसे सोचते हैं? या सुरंगें?
ओमेरक क्रोनन जूल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.