2008-10-01 29 views

Trả lời

65

Cụm từ bạn đang tìm kiếm là mã hóa địa lý và có Google cung cấp dịch vụ này.

+1

Tuyệt vời!Phần "Mã hóa địa lý qua HTTP" có vẻ là những gì tôi đang tìm kiếm. –

+3

Chỉ cần chắc chắn rằng bạn giữ trong các quy tắc sử dụng. Tôi nghĩ Google chỉ cho phép sử dụng điều này nếu bạn hiển thị các vị trí trên Google Map. Nó không được phép sử dụng nó cho các mục đích khác, nhưng bạn nên kiểm tra giấy phép và các quy tắc sử dụng. – peSHIr

+0

v2 (không được dùng kể từ năm 2010) sẽ ngừng hoạt động hoàn toàn chỉ trong vài tháng (tháng 5 năm 2013), vì vậy bạn không nên tạo bất kỳ thứ gì mới mẻ với tiện ích này nữa! – Funka

14

Nếu bạn muốn làm điều này mà không dựa vào một dịch vụ, sau đó bạn tải về TIGER Shapefiles từ US Census .

Bạn tra cứu con đường bạn quan tâm, sẽ có một số đoạn. Mỗi phân đoạn sẽ có một địa chỉ xuất phát và địa chỉ kết thúc, và bạn nội suy dọc theo phân khúc để tìm vị trí trên phân đoạn số nhà của bạn.

Điều này sẽ cung cấp cho bạn cặp đôi lon/lat.

Tuy nhiên, hãy nhớ rằng các dịch vụ trực tuyến sử dụng rất nhiều kiểm tra và sửa địa chỉ, bạn cũng phải sao chép để có kết quả tốt.

Cũng lưu ý rằng dữ liệu miễn phí đẹp, không hoàn hảo - các đường mới nhất không có trong đó (chúng có thể có trong dữ liệu mà Google sử dụng) và đường phố có thể nằm ngoài vị trí thực của chúng. khảo sát không chính xác. Nhưng đối với 98% mã hóa địa lý cần nó hoạt động hoàn hảo, miễn phí và bạn kiểm soát mọi thứ để bạn giảm sự phụ thuộc trong ứng dụng của mình.

OpenStreetMap có mục đích lập bản đồ tất cả mọi thứ trên thế giới, mặc dù họ không khá có nó có giá trị giữ các tab trên khi họ cung cấp dữ liệu của họ theo một giấy phép CC

Tuy nhiên, nhiều người (nhất?) Các nước khác chỉ được ánh xạ bởi gov't hoặc các dịch vụ mà bạn cần phải trả một khoản phí. Nếu bạn không cần mã hóa địa lý nhiều dữ liệu, thì sử dụng Google, Yahoo hoặc một số dịch vụ lập bản đồ miễn phí khác trên toàn thế giới có thể là đủ.

Nếu bạn phải mã hóa địa lý nhiều dữ liệu, thì bạn sẽ được phục vụ tốt nhất bằng cách cho thuê dữ liệu bản đồ từ nhà cung cấp chính, chẳng hạn như teleatlas.

-Adam

+0

Điều này sẽ không hoạt động (đối với câu hỏi này, nói chung nó có vẻ tốt cho Mỹ), như câu hỏi đã nêu rằng một giải pháp chỉ hoạt động cho các địa chỉ ở Hoa Kỳ sẽ không phải là giải pháp có thể chấp nhận được. – peSHIr

+1

Đó là sự thật, nhưng ban đầu câu hỏi không nêu rõ điều này - các chỉnh sửa được thực hiện bởi tác giả trong vòng 15 phút của bài đăng gốc không được coi là chỉnh sửa. Tuy nhiên, tôi sẽ cập nhật câu trả lời. –

22

Ngoài việc nói trên Google geocoding web service, đó cũng là một cạnh tranh service provided by Yahoo. Trong một dự án gần đây, nơi mã hóa địa lý được thực hiện với tương tác của người dùng, tôi đã hỗ trợ cả hai. Lý do là tôi đã nhận thấy rằng, đặc biệt là bên ngoài Hoa Kỳ, việc xử lý các địa điểm ít người biết đến của họ thay đổi rất nhiều. Đôi khi Google sẽ có câu trả lời hay nhất, đôi khi là Yahoo.

Một điều cần lưu ý: nếu Google thực sự nghĩ rằng họ không biết vị trí của bạn, họ sẽ trả lại lỗi 602 cho biết lỗi. Yahoo, mặt khác, nếu nó có thể bóc một thành phố/tỉnh/bang/etc ra khỏi địa chỉ xấu của bạn, sẽ trả lại vị trí của trung tâm của thị trấn đó. Vì vậy, bạn phải chú ý đến kết quả bạn nhận được để xem nếu họ thực sự là những gì bạn muốn. Có một số lĩnh vực phụ trợ trong một số kết quả cho bạn biết về điều này: Yahoo gọi trường này là "chính xác" và Google gọi nó là "chính xác".

+1

Một jsfiddle với một ví dụ về sự thay thế cho dịch vụ Yahoo, các hình ảnh của Nokia: http://jsfiddle.net/MgjGr/ –

4

Điều khoản dịch vụ của Google sẽ cho phép bạn sử dụng API mã hóa địa lý miễn phí nếu trang web của bạn miễn phí cho người tiêu dùng sử dụng. Nếu không, bạn sẽ phải có giấy phép cho Bản đồ doanh nghiệp.

9

Bạn cũng có thể thử OpenStreetMapNameFinder, chứa dữ liệu đường phố giống như mã nguồn mở, wiki cho (có thể) toàn thế giới. NameFinder sẽ ngừng tồn tại vào cuối tháng 8, nhưng Nominatim là sự thay thế của nó.

7

Google yêu cầu bạn để hiển thị một bản đồ Google với dữ liệu của họ, với tối đa là 2.5k (là 25k) các yêu cầu HTTP mỗi ngày. Hữu ích nhưng bạn phải xem cách sử dụng.

Họ làm có

http://groups.google.com/group/Google-Maps-API/web/resources-non-google-geocoders

(Google đã từ bỏ này. Nếu bạn thấy một bản sao hoặc bộ nhớ cache, tôi sẽ liên kết đến đó.)

... trong đó tôi thấy GeoNames có cả db có thể tải xuống, dịch vụ web miễn phí và dịch vụ web thương mại.

+1

Rất tiếc, có vẻ như liên kết groups.google.com không còn tồn tại .. Cảm ơn bạn đã liên kết tên địa lý tuy nhiên, có vẻ đầy hứa hẹn! – Funka

+1

Điểm chỉnh sửa/làm rõ: API "v3" của Google cho phép 2.500 yêu cầu mỗi ngày (theo địa chỉ IP!), Không phải 25k. Xem https://developers.google.com/maps/documentation/geocoding/#Limits – Funka

+0

Đã cập nhật. Cảm ơn, Funka. –

3

Để sử dụng với Drupal và PHP (và dễ dàng sửa đổi):

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; 
} 
+0

Siêu! , Cảm ơn thần đọc tất cả các câu trả lời, thats y tôi có thể tìm thấy câu trả lời của bạn. Tôi sẽ biết là có bất kỳ hạn chế của việc sử dụng url này trong php bình thường. như số lượng yêu cầu mỗi ngày? @Nate – Rajesh

2

R Mã để có được những vĩ độ và kinh độ của một địa chỉ đường phố

# 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" 
2

Nếu bạn muốn làm điều này bằng Python:

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 

Lưu ý rằng Google có vẻ như yêu cầu ottle nếu nó thấy nhiều hơn một số tiền nhất định, vì vậy bạn muốn sử dụng một khóa API trong yêu cầu HTTP của bạn.

1

Tôi đã có một lô 100.000 hồ sơ được mã địa lý và chạy vào giới hạn Google API (và vì đó là cho một ứng dụng doanh nghiệp nội bộ, chúng tôi phải nâng cấp lên dịch vụ đặc biệt của họ mà là $ 10K cộng)

Vì vậy, , Tôi đã sử dụng thay thế này: http://geoservices.tamu.edu/Services/Geocode/BatchProcess/ - họ cũng có API. (Tổng chi phí là khoảng ~ 200 $)

0

Bạn có thể thử điều này trong JavaScript cho thành phố như kohat

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

Các vấn đề liên quan