2016-04-11 16 views
1

Ol3-sezyum kullanırken ve harita 3B modundayken, map.getView(). GetZoom() işlevi tanımsız olarak döndürülür. Bu setZoom'u da etkileyebilir.Yüksekliği z seviyesine dönüştürme (ve tersi)

Anladığımız kadarıyla bir 3d dünyamız var, bu yüzden kiremitli haritalarda olduğu gibi hiçbir z seviyesi yok. Öte yandan, Google Haritalar, 3D'den 2d'ye geri dönerken bir z eşdeğerini hesaplar.

Yükseklikten z eşdeğerine nasıl dönüşebilirim? Enlem ve rakımı hesaba katan herhangi bir formül, z eşdeğerini elde etmek için mi?

cevap

2

3D bir 2D "Z" değeri elde etmek hiç de kolay bir formül 3D kamera eğilebilir çünkü ancak bireysel fayans vb

, arka vs ön planda karoların farklı düzeyi görebilirsiniz var, , görüntü dörtgeninden belirli "Seviye" değerleri vardır. Sağ taraftaki Terrain kelimesinin yanındaki + numaralı tuşa tıklayarak Cesium Inspector numaralı telefonu görebilir ve ardından Show tile coordinates numaralı telefona bir onay işareti koyabilirsiniz. Gösterilen koordinatlar L, X ve , L, karo seviyesinin (0 en yakınlaştırılmış, daha yüksek sayılara yakınlaştırılmış) ve X ve Y görüntü katmanındaki 2B konumlardır.

Cesium Inspector'ın yaptığı gibi, bu döşemelere nasıl ulaşılacağını ve yakalanacağını gösteren bir answer on GIS SE yayınladım. Potansiyel olarak en üst düzey görünür döşemeyi arayabilir ve bunu "Z" değeriniz olarak kullanabilirsiniz.

+0

Yorumunuz, alınacak resimlerin Z seviyesini bulmak için çok önemlidir. Öte yandan, benim ihtiyacım için eğilmeyi tamamen göz ardı edebilirim, çünkü 2D haritada böyle bir şey yoktur (herhangi bir eğme düz aşağıya bakacak şekilde değiştirilir). –

0

Bunun doğru olmadığını biliyorum, ancak bunun herkes için kullanılması durumunda paylaşılması.

ben z veya irtifa adres çubuğunda gösterilen aşağı yazma, 2D ve 3D haritalar arasında geçiş Google Maps birkaç irtifalarda taşındı: Yukarıdaki yazışmalar ile

z  altitude (metres) 
----- ----------------- 
3   10311040 
4   5932713 
5   2966357 
6   1483178 
7   741589 
8.6   243624 
11.35   36310 
13.85   6410 
15.26   2411 
17.01   717 
18.27   214 
19.6    119 
20.77    50 
21    44 

, ben approximated the following function var: Formülünüzde dayanarak

function altitudeToZoom(altitude) { 
    var A = 40487.57; 
    var B = 0.00007096758; 
    var C = 91610.74; 
    var D = -40467.74; 

    return D+(A-D)/(1+Math.pow(altitude/C, B)); 
} 
0

, ters dönüştürme olmalıdır:

yükseklik = C * Math.pow ((AD)/(zoomLevel-D) -1, 1/B);

+0

Teşekkürler, birisi yararlı bulabilir. Yine de, formülü başlamak için çok doğru değil. –

+1

Ve orijinal hesaplamaları yaptığınız için teşekkür ederim. Cesium'u Mapstraction ile entegre ediyorum ve formüller gayet iyi çalışıyor gibi görünüyor. BTW, Math.round (D + (A-D)/(1 + Math.pow (yükseklik/C, B))) olmalıdır. Sezyum kamera görüntüsünü (kapsam, ölçek) harita boyut dikdörtgenine (harita sınırları), herhangi bir fikre (2D/3D) dönüştürmek için bazı zorluklarla karşılaşıyorum? –

+0

Eh, yalnızca tamsayı yakınlaştırma düzeyleriyle ilgileniyorsanız Math.round() olur. Ancak, zum 7 ve zum 7.5 arasındaki farka dikkat ederseniz, turu kullanmamalısınız. –