2010-09-05 10 views
18

Tôi có một hệ thống nơi người dùng đặt một số tọa độ (vĩ độ/kinh độ), tôi cần kiểm tra xem tọa độ được chỉ định có ở trên biển hay không. Có dịch vụ nào có thể cho tôi câu trả lời không. Hoặc là nó có thể làm điều này bằng cách sử dụng bản đồ google.Tôi cần biết điểm được xác định trước là trên biển hoặc trên đất

+1

+1 Câu hỏi hấp dẫn! Quan tâm để xem liệu API Google Maps có thể làm điều này hay không. –

+1

Có thể bạn thử http://gis.stackexchange.com/? – RoToRa

Trả lời

19

Bạn có thể sử dụng Google Maps Geocode API.

Nếu địa chỉ của bạn ở trong đất, kết quả_type của phản hồi sẽ giống như "administrative_area". nếu bạn đang ở trên biển, câu trả lời sẽ là "natural_feature".

Dưới đây là hai ví dụ:

Edit: Một số ví dụ khác để đáp ứng với nhận xét:

+3

chết tiệt, câu trả lời hay! –

+2

+1 Rất đẹp! Chỉ có một tiềm năng snag đến tâm: Khu vực biển tuyên bố của một quốc gia hoặc trong khu vực 12 dặm - họ sẽ hiển thị như là "khu vực hành chính" hoặc là một "tính năng tự nhiên"? Đó sẽ là giá trị thử nghiệm. –

+1

tôi sửa câu trả lời của tôi để thêm một bài kiểm tra trong vùng dặm Anh 12. Hiển thị dưới dạng tính năng tự nhiên. –

15

Tôi đã nghĩ về điều này một lần trước đây.

Tôi sẽ không sử dụng dịch vụ web. nhưng tôi sẽ sử dụng một hình ảnh khá đơn giản. alt text

hình ảnh này được lấy từ http://www.vectorworldmap.com/vectormaps/vector-world-map-v2.2-blank.jpg

EDIT từ một lời nhận xét tốt

Tôi thích giải pháp, nhưng tôi không chắc chắn rằng bản đồ là hoàn toàn chính xác hoặc equirectangular (đó sẽ là cách dễ nhất để làm việc). Còn khoảng cái này? naturalearth.springercarto.com/ne3_data/8192/masks/water_8k.png

// END

  • tôi sẽ lập bản đồ lat/dài trên bản đồ này cho điểm bí quyết để bạn biết bản đồ của bạn đúng.
  • Đối với bất kỳ điểm cho điểm nào, tôi sẽ định vị vị trí pixel trên bản đồ này và tìm ra màu (php có thể thực hiện việc này).
  • Nếu màu trắng, tôi có thể nói là biển, đen = đất.
  • nếu bạn không muốn hồ, hãy mở bản đồ và tô màu tất cả các hồ màu đen.

Nếu bạn cần bản đồ có độ phân giải cao, tôi sẽ có một bản đồ rất lớn và chia thành bản đồ các hình ảnh nhỏ hơn mà bạn có thể tải.

Nếu bạn cần làm cho hệ thống này siêu nhanh. Tôi có thể làm điểm ảnh này cho pixel và tạo cơ sở dữ liệu về nội dung này để bạn có thể tra cứu nó nhanh chóng. Nhưng hình ảnh này dưới đây thực sự hoạt động như một cơ sở dữ liệu tuyệt vời có thể dễ dàng kiểm tra hoặc thay đổi.

Bạn có muốn các đại dương và hồ không?

Tò mò để biết bạn đang đi đâu với điều này, vì tôi thích vấn đề này.

John.

+5

Giải pháp thông minh +1. Tôi đã học được điều gì đó hôm nay –

+0

cảm ơn! đánh giá cao. google chết tiệt, tôi đã có thể nhận được câu trả lời được chấp nhận. Của tôi vẫn còn khá tốt cho những thứ khác. Và bạn có thể đưa vào các loại tính năng khác khá dễ dàng. –

+2

Thông minh! Nhưng bạn cần phải tắt logo trước: D –

5

Mở rộng trên John Ballinger, tôi đã sử dụng thành công thủ thuật này:

  • Nhận một 1x1 pixel google hình ảnh bản đồ tĩnh tập trung vào tọa độ của bạn
  • đồ Style đen (đất) và trắng (nước) qua kiểu API Google Maps
  • Tìm xem pixel có màu đen hoặc trắng

Trong php:

$lat = your latitude 
$lon = your longitude 
$im = imagecreatefrompng('http://maps.googleapis.com/maps/api/staticmap?center='.$lat.','.$lon.'&zoom=21&format=png&sensor=false&size=1x1&maptype=roadmap&style=feature:administrative|visibility:off&style=feature:landscape|color:0x000000&style=feature:water|color:0xffffff&style=feature:road|visibility:off&style=feature:transit|visibility:off&style=feature:poi|visibility:off'); 
//get pixel color, put it in an array 
$color_index = imagecolorat($im, 0, 0); 
$color_tran = imagecolorsforindex($im, $color_index); 

//if, for example, red value of the pixel is 0 we are on land 
if($color_tran['red']==0){ 
    //do your thing 
    echo "we are on land"; 
} 
+0

Công việc tốt, tiền thưởng siêu cho việc hiển thị mã! –

+0

Điều này đã giúp tôi rất nhiều: D – FosAvance