Tính toán giới hạn lat lon cho từng ô riêng lẻ được tạo từ gdal2tiles


16

Tôi có nhiều nguồn gạch được tạo bằng gdal2tiles tôi muốn trình bày trên cùng một bản đồ. Vì vậy, khi trình bày một lát tôi cần xác định nguồn nào sẽ phục vụ nó từ đó, kiểm tra các giới hạn.

Bất cứ ai cũng biết cách tính các giới hạn lat lon cho một ô đơn thuần dựa trên thu phóng, x và y (từ cấu trúc tệp được tạo bởi gdal2tiles)? BTW: Tôi đang sử dụng Google Maps API v3 trong trường hợp cần gọi một số chức năng từ API để giúp tính toán.

Lý do tôi bị hạn chế thu phóng hoàn toàn, x và y là vì các ô không chỉ được gọi bởi lớp phủ trên bản đồ mà còn có một số chức năng in tùy chỉnh cho phép in bên ngoài bản đồ.

Câu trả lời:


22

Toán học được mô tả tại:

http://www.maptiler.org/google-maps-coordins-tile-bound-projection/

Có bao gồm mã nguồn cho tiện ích dòng lệnh và trình diễn trực tuyến.

Nó cũng là một phép toán khá đơn giản:

function tile2long(x,z) { return (x/Math.pow(2,z)*360-180); }

function tile2lat(y,z) {
    var n=Math.PI-2*Math.PI*y/Math.pow(2,z);
    return (180/Math.PI*Math.atan(0.5*(Math.exp(n)-Math.exp(-n))));
}

Lưu ý sự khác biệt giữa XYZ / Google so với TMS trong trục y.

Google Maps API V3 cung cấp cho bạn các chức năng cần thiết quá qua .fromPointToLatLng()của map.getProjection().


Tôi chỉ đang cố gắng để hiểu các giải pháp trên vì tôi có cùng một vấn đề. Ý bạn là trong giải pháp trên tôi nên 1. Đầu tiên chuyển đổi x, y và phóng to lat / long bằng cách sử dụng brick2long () và brick2lat (). 2. Sử dụng lat / long được tạo trong bước để tạo giới hạn? Tôi nên làm thế nào?
Vishal

@Petr Bạn có gì cho c ++ không?
Majid Hojati

Nó không đưa kích thước gạch vào tài khoản?
Muhammad Umer

@ petr-pridal Điều này dẫn đến một điểm, theo sự hiểu biết tốt nhất của tôi, một viên ngói là một khu vực hoặc bề mặt. Bạn có thể cung cấp mã cho một hộp giới hạn? Cảm ơn trước.
Herbert

Từ bài viết này gist.github.com/tmcw/4954720 , TMS là cùng một ô, nhưng được lập chỉ mục ngược. Đây là công thức chuyển đổi: Math.floor (Math.pow (2, z) - y - 1)
Haggai


0

Đây là mã làm việc của tôi:

mẫu jsfiddle của lớp phủ bản đồ hình ảnh google

jsfiddle một mẫu khác của hình ảnh lớp phủ google

function tile2long(x,z) {

  return (x/Math.pow(2,z)*360-180);

}





function tile2lat(y,z) {

  var n=Math.PI-2*Math.PI*y/Math.pow(2,z);

  return (180/Math.PI*Math.atan(0.5*(Math.exp(n)-Math.exp(-n))));

}





 var x = coord.x;

 var y = coord.y;

 var z = zoom;



 var NW_long = tile2long(x,z);



 var SW_long = tile2long(x,z);

 var SW_lat =  tile2lat(y+1,z);



 var NE_long = tile2long(x+1,z);

  var NE_lat =  tile2lat(y,z);







  var export_bbox = SW_long + ',' + SW_lat + ',' + NE_long + ',' + NE_lat;



     var url_param = '&format=png&size=256,256&transparent=true&f=image&bboxSR=4326&imageSR=4326';





   var url_layers =''





       var root_url = 'https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/export?bbox=';



     var tile_url = root_url + export_bbox + url_param + url_layers;

maptiler nhận bbox từ số phối hợp và phóng to

Làm thế nào để tính toán số tọa độ google, chuyển đổi, lat dài vv ....

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.