Gdal2tiles öğesinden oluşturulan ayrı döşemeler için lat lon sınırlarını hesapla


16

Aynı haritada sunmak istediğim gdal2tiles kullanılarak oluşturulmuş birden fazla döşeme kaynağım var. Bu nedenle, bir kutucuğu sunarken, hangi kaynağın sunulacağını, sınırları kontrol ederek belirlemem gerekiyor.

Herkes sadece zoom, x ve y (gdal2tiles tarafından oluşturulan dosya yapısından) dayalı tek bir kiremit için latn sınırlarını nasıl hesaplayacağını biliyor? BTW: Hesaplamalara yardımcı olması için API'dan bazı işlevleri çağırmanız gerektiğinde Google Maps API v3 kullanıyorum.

Sadece zum, x ve y ile sınırlandırılmamın nedeni, karoların yalnızca haritadaki bir kaplama tarafından değil, aynı zamanda haritanın dışına yazdırmaya izin veren bazı özel baskı işlevleriyle de çağrılmasıdır.

Yanıtlar:


22

Matematik:

http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/

… Komut satırı yardımcı programı için kaynak kodu ve çevrimiçi tanıtım da dahil.

Aynı zamanda oldukça basit bir matematiktir:

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))));
}

Y ekseninde XYZ / Google ile TMS arasındaki farkı not edin.

Google Maps API V3 çok yoluyla size gerekli işlevleri verir .fromPointToLatLng()arasında map.getProjection().


Aynı sorunu yaşadığım için yukarıdaki çözümü anlamaya çalışıyorum. Yukarıdaki çözümde 1 şunu mu demek istediniz?. Önce tile2long () ve tile2lat () kullanarak x, y ve zoom değerlerini lat / long birimine dönüştürün. 2. Sınır oluşturmak için adımda oluşturulan enlem / boylam kullanılsın mı? Bunu nasıl yapmalıyım?
Vishal

@Petr c ++ için bir şeyleriniz var mı?
Majid Hojati

karo boyutunu dikkate almıyor mu?
Muhammed Umer

@ petr-pridal Bu bir nokta ile sonuçlanır, bildiğim kadarıyla bir kiremit bir alan veya yüzeydir. Sınırlayıcı bir kutu için kod verebilir misiniz? Şimdiden teşekkürler.
Herbert

Bu makaleden gist.github.com/tmcw/4954720 , TMS aynı döşemedir , ancak geriye doğru dizine eklenir. Bu dönüşüm formülü: Math.floor (Math.pow (2, z) - y - 1)
Haggai


0

Bu benim çalışma kodum:

google resim haritası türü yer paylaşımının jsfiddle örneği

jsfiddle google yer paylaşımı görüntüsünün başka bir örneği

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 coodinate numarasından ve yakınlaştırmadan bbox al

google koordinat numarası zoom hesaplamak nasıl, dönüştürmek, lat uzun vb ....

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.