В процессе. Карта отображается. Отображение детализации по факту завершения загрузки карты
This commit is contained in:
@@ -97,6 +97,27 @@ func radians(v: float) -> float: return (v * PI) / 180.0
|
||||
func rshift(val: int, n: int) -> int: return (val % 0x100000000) >> n
|
||||
|
||||
|
||||
func asinh(val: float): return log(val + sqrt(val * val + 1.0))
|
||||
|
||||
|
||||
## Lon./lat. to tile numbers
|
||||
func deg2num(lat_deg: float, lon_deg: float, zoom: int):
|
||||
var lat_rad: = radians(lat_deg)
|
||||
var n: = float(1 << zoom)
|
||||
var xtile: = int((lon_deg + 180.0) / 360.0 * n)
|
||||
var ytile: = int((1.0 - asinh(tan(lat_rad)) / PI) / 2.0 * n)
|
||||
return [xtile, ytile]
|
||||
|
||||
|
||||
## Tile numbers to lon./lat.
|
||||
func num2deg(xtile: int, ytile: int, zoom: int):
|
||||
var n: = float(1 << zoom)
|
||||
var lon_deg: = float(xtile) / n * 360.0 - 180.0
|
||||
var lat_rad: = atan(sinh(PI * (1.0 - 2.0 * float(ytile) / n)))
|
||||
var lat_deg = degrees(lat_rad)
|
||||
return [lat_deg, lon_deg]
|
||||
|
||||
|
||||
## Расстояние по горизонтали в метрах, представленное одним пикселем
|
||||
## [paramn lat] - Широта, градусы.[br]
|
||||
## [paramn zoom] - Уровень детализации.[br]
|
||||
@@ -213,16 +234,16 @@ func ul2(tile: Tile) -> Array[float]:
|
||||
## [param tile] - Плитка.[br]
|
||||
func bounds(tile: Tile) -> LngLatBbox:
|
||||
var z2: = pow(2, tile.z)
|
||||
var ul_lon_deg = tile.x / z2 * 360.0 - 180.0
|
||||
var lr_lon_deg = (tile.x + 1) / z2 * 360.0 - 180.0
|
||||
var ul_lat_rad = atan(sinh(PI * (1 - 2 * tile.y / z2)))
|
||||
var ul_lon_deg = float(tile.x) / z2 * 360.0 - 180.0
|
||||
var lr_lon_deg = (float(tile.x) + 1.0) / z2 * 360.0 - 180.0
|
||||
var ul_lat_rad = atan(sinh(PI * (1.0 - 2.0 * float(tile.y) / z2)))
|
||||
var ul_lat_deg = degrees(ul_lat_rad)
|
||||
var lr_lat_rad = atan(sinh(PI * (1 - 2 * (tile.y + 1) / z2)))
|
||||
var lr_lat_rad = atan(sinh(PI * (1.0 - 2.0 * (float(tile.y) + 1.0) / z2)))
|
||||
var lr_lat_deg = degrees(lr_lat_rad)
|
||||
return LngLatBbox.new(ul_lon_deg, lr_lat_deg, lr_lon_deg, ul_lat_deg)
|
||||
|
||||
|
||||
func truncate_lnglat(lng: float, lat: float) -> Array[float]:
|
||||
func truncate_lnglat(lng: float, lat: float) -> Array:
|
||||
if lng > 180.0: lng = 180.0
|
||||
elif lng < -180.0: lng = -180.0
|
||||
if lat > 90.0: lat = 90.0
|
||||
@@ -236,7 +257,7 @@ func truncate_lnglat(lng: float, lat: float) -> Array[float]:
|
||||
## [param truncate] - Нужно ли усекать входные данные до пределов веб-меркатора.[br]
|
||||
## ([param lat] >= 90) [b]inf[/b] на северном и [b]-inf[/b] на южном полюсе ([param lat] <= -90).
|
||||
func xy(lng: float, lat: float, truncate: bool = false) -> Array[float]:
|
||||
var ll = truncate_lnglat(lng, lat) if truncate else [0.0, 0.0]
|
||||
var ll = truncate_lnglat(lng, lat) if truncate else [lng, lat]
|
||||
var x: float = RE * radians(lng)
|
||||
var y: float = 0.0
|
||||
if ll[1] <= -90.0: y = float('-inf')
|
||||
@@ -251,7 +272,7 @@ func xy(lng: float, lat: float, truncate: bool = false) -> Array[float]:
|
||||
func lnglat(x: float, y: float, truncate: bool = false) -> LngLat:
|
||||
var lng: = x * R2D / RE
|
||||
var lat: = ((PI * 0.5) - 2.0 * atan(exp(-y / RE))) * R2D
|
||||
var ll: = truncate_lnglat(lng, lat) if truncate else [0.0, 0.0]
|
||||
var ll: = truncate_lnglat(lng, lat) if truncate else [lng, lat]
|
||||
return LngLat.new(ll[0], ll[1])
|
||||
|
||||
|
||||
@@ -293,8 +314,8 @@ func xy_bounds(tile: Tile, zoom: int) -> Bbox:
|
||||
return Bbox.new(left, bottom, right, top)
|
||||
|
||||
|
||||
func _xy(lng, lat, truncate=false) -> Array[float]:
|
||||
var ll: = [lng, lat] if not truncate else truncate_lnglat(lng, lat)
|
||||
func _xy(lng: float, lat: float, truncate=false) -> Array:
|
||||
var ll: = truncate_lnglat(lng, lat) if truncate else [lng, lat]
|
||||
var x: float = ll[0] / 360.0 + 0.5
|
||||
var sinlat: = sin(radians(ll[1]))
|
||||
var y: = 0.5 - 0.25 * log((1.0 + sinlat) / (1.0 - sinlat)) / PI
|
||||
|
||||
@@ -22,6 +22,14 @@ signal threat_unselected(threats: Dictionary, th)
|
||||
signal full_screen(id: int)
|
||||
|
||||
|
||||
## Вызывается при изменении уровня детализации карты
|
||||
## Вызывается при запросе изменения уровня детализации карты
|
||||
## [param zoom] - Вновь установленный уровень детализации
|
||||
signal zoom_changed(zoom: int)
|
||||
|
||||
## Вызывается при завершении изменения уровня детализации карты
|
||||
## [param zoom] - Вновь установленный уровень детализации
|
||||
signal zoom_complete(zoom: int)
|
||||
|
||||
## Вызывается при изменении координат карты
|
||||
## [param lan], [param lat] - Вновь установленные координаты
|
||||
signal map_coords_changed(zoom: int)
|
||||
|
||||
Reference in New Issue
Block a user