كيفية الحصول على خط الطول وخط العرض لعنوان الشارع برمجياً (وقانونياً)

StackOverflow https://stackoverflow.com/questions/158474

سؤال

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

هل كانت مفيدة؟

المحلول

المصطلح الذي تبحث عنه هو الترميز الجغرافي ونعم توفر Google هذه الخدمة.

نصائح أخرى

إذا كنت تريد أن تفعل ذلك دون الاعتماد على الخدمة، ثم تقوم بتحميل في TIGER و Shapefiles من تعداد الولايات المتحدة.

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

وهذا سوف توفر لك مع خط الطول / الزوج اللات.

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

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

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

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

إذا كان لديك إلى الترميز الجغرافي الكثير من البيانات، ثم سوف تكون أفضل تخدمها تأجير بيانات الخرائط من المزود الرئيسي، مثل teleatlas.

و-Adam

ويمكنك أيضا أن تجرب أوبن ستريت ماب <لأ href = "http://wiki.openstreetmap.org/ ويكي / Namefinder "يختلط =" noreferrer "> NameFinder ، الذي يحتوي على المصدر المفتوح، والبيانات الشارع مثل ويكي ل(يحتمل) العالم بأسره. سوف تتوقف NameFinder في الوجود في نهاية أغسطس، ولكن Nominatim عبارة الاستعاضة عنها.

وجوجل يتطلب منك أن تظهر خريطة جوجل مع البيانات الخاصة بهم، مع حد أقصى من 2.5K (كان 25K) طلبات HTTP يوميا. مفيدة ولكن لديك لمشاهدة الاستخدام.

ولديهم

<وأ href = "http://groups.google.com/group/Google-Maps-API/web/resources-non-google-geocoders" يختلط = "نوفولو noreferrer" عنوان = "وصلة إلى خدمات أخرى" > http://groups.google.com/group/Google-Maps-API/web/resources-non-google-geocoders

و(منذ ذلك الحين جوجل إزالة هذا. إذا كنت ترى نسخة مكررة أو ذاكرة التخزين المؤقت، سوف تصل إلى ذلك.)

... التي وجدت GeoNames الذي على حد سواء للتحميل ديسيبل، خدمة الإنترنت المجانية و خدمة الويب التجارية.

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

لاستخدام مع دروبال وPHP (وسهولة تعديلها):

function get_lat_long($address) {
  $res = drupal_http_request('http://maps.googleapis.com/maps/api/geocode/json?address=' . $address .'&sensor=false');
  return json_decode($res->data)->results[0]->geometry->location;
}

ويمكنك إلقاء نظرة على مستندات API خرائط جوجل هنا للحصول على بداية على هذا:

http://code.google.com/apis/maps /documentation/services.html#Geocoding

ويبدو أيضا أن يكون شيء يمكنك القيام به لعناوين الدولية باستخدام خرائط لايف أيضا:

http://virtualearth.spaces.live.com/blog /cns!2BBC66E99FDCDB98!1588.entry

ويمكنك أيضا القيام بذلك مع خدمات ويب ل MapPoint مايكروسوفت.

وهنا بلوق وظيفة التي تشرح كيفية القيام بذلك: http://www.codestrider.com/BlogRead. ASPX؟ ب = b5e8e275-cd18-4c24-b321-0da26e01bec5

رمز R للحصول على خط الطول وخط العرض لعنوان الشارع

# CODE TO GET THE LATITUDE AND LONGITUDE OF A STREET ADDRESS WITH GOOGLE API
addr <- '6th Main Rd, New Thippasandra, Bengaluru, Karnataka'  # set your address here
url = paste('http://maps.google.com/maps/api/geocode/xml?address=', addr,'&sensor=false',sep='')  # construct the URL
doc = xmlTreeParse(url) 
root = xmlRoot(doc) 
lat = xmlValue(root[['result']][['geometry']][['location']][['lat']]) 
long = xmlValue(root[['result']][['geometry']][['location']][['lng']]) 
lat
[1] "12.9725020"
long
[1] "77.6510688"

إذا كنت تريد أن تفعل هذا في بيثون:

import json, urllib, urllib2

address = "Your address, New York, NY"

encodedAddress = urllib.quote_plus(address)
data = urllib2.urlopen("http://maps.googleapis.com/maps/api/geocode/json?address=" + encodedAddress + '&sensor=false').read()
location = json.loads(data)['results'][0]['geometry']['location']
lat = location['lat']
lng = location['lng']
print lat, lng

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

وكان لي دفعة من 100،000 السجلات إلى أن الترميز الجغرافي وركض إلى حد جوجل API ل(ونظرا لأنه كان لبرنامج الشركة الداخلي، كان علينا أن الترقية إلى الخدمة المتميزة والذي هو 10K $ زائد)

وهكذا، وأنا استخدم هذا بدلا من ذلك: http://geoservices.tamu.edu/Services/ الترميز الجغرافي / BatchProcess / - لديهم أيضا API. (التكلفة الإجمالية كانت حول ~ 200 $)

يمكنك تجربة ذلك في JavaScript لمدينة مثل كوهات

var geocoder = new google.maps.Geocoder();
var address = "kohat";
geocoder.geocode( { 'address': address}, function(results, status) {
var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
alert(latitude+" and "+longitude);
  } 
});

enter image description here

في بايثون باستخدام Geopy PyPI تستخدم للحصول على خطوط الطول والعرض والرمز البريدي وما إلى ذلك.هنا هو رمز عينة العمل ..

from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent="your-app-id")

location = geolocator.geocode("Your required address ")

if location:
    print('\n Nominatim ADDRESS :',location.address)
    print('\n Nominatim LATLANG :',(location.latitude, location.longitude))
    print('\n Nominatim FULL RESPONSE :',location.raw)
else:
   print('Cannot Find')

في نوميناتيم - بعض العناوين لا تعمل، لذلك حاولت للتو ماب كويست.
يعود بشكل صحيح.يوفر Mapquest خطة مجانية تصل إلى 15000 معاملة شهريًا.يكفي بالنسبة لي.

عينة من الرموز:

import geocoder
g = geocoder.mapquest("Your required address ",key='your-api-key')

for result in g:
   # print(result.address, result.latlng)
   print('\n mapquest ADDRESS :',result.address,result.city,result.state,result.country)
   print('\n mapquest LATLANG :', result.latlng)
   print('\n mapquest FULL RESPONSE :',result.raw)

نأمل أن يساعد.

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

كود HTML

<form>
    <input type="text" name="address" id="address" style="width:100%;">
    <input type="button" onclick="return getLatLong()" value="Get Lat Long" />
</form>
<div id="latlong">
    <p>Latitude: <input size="20" type="text" id="latbox" name="lat" ></p>
    <p>Longitude: <input size="20" type="text" id="lngbox" name="lng" ></p>
</div>

كود جافا سكريبت

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script>

    <script>
    function getLatLong()
    {
        var address = document.getElementById("address").value;
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( { 'address': address}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                var latitude = results[0].geometry.location.lat();
                document.getElementById("latbox").value=latitude;
                var longitude = results[0].geometry.location.lng();
                document.getElementById("lngbox").value=longitude;
            } 
        });
    }
    </script>

لمزيد من المعلومات راجع هذا الرابط https://www.phpkida.com/java-script/get-latitude-longitude-from-address/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top