Skip to main content

Deployment & Management

Discussion board where members learn more about Qlik Sense Installation, Deployment and Management.

Announcements
Skip the ticket, Chat with Qlik Support instead for instant assistance.
cancel
Showing results for 
Search instead for 
Did you mean: 
Sergey_Despot
Contributor III
Contributor III

Пересчет координат для использования подложки Яндекс Карт (yandex maps)

Представленная ниже процедура берет координаты в формате GeoMakePoint из целевой таблицы и добавляет альтернативные координаты для использования подложки Яндекс карт

sub getGeo_Yandex(Tb, F1, F2)
Trace Пересчет координат происходит по полю $(F1) сформированное через GeoMakePoint;
tmp_geo:
Load Distinct
[$(F1)]
Resident [$(Tb)]
where len(trim([$(F1)])) > 0;
For r = 1 to NoOfRows('tmp_geo')
ID = Peek('ID', $(r)-1, 'tmp_geo');
vGeo = Peek('Geo', $(r)-1, 'tmp_geo');
Trace vGeo: $(vGeo);
vLat = SubField(Replace(Replace('$(vGeo)', '[', ''), ']', ''), ',', 2)
vlng = SubField(Replace(Replace('$(vGeo)', '[', ''), ']', ''), ',', 1);

//Пересчет координат из широты/долготы в проекцию Меркатора/WGS84
if $(vLat) > 89.5 then
vLat = 89.5
end if;
if $(vLat) < -89.5 then
vLat = -89.5
end if;

rLat = vLat * pi()/180; //медиана
rLong = vlng * pi()/180;//медиана

cA=6378137.0
cB=6356752.3142
cF=(cA-cB)/cA
cE=sqrt(2*cF-pow(cF,2))
x=cA*rLong
y=cA*log(tan(pi()/4+rLat/2)*pow(((1-cE*sin(rLat))/(1+cE*sin(rLat))),(cE/2)))

//Пересчет координат из "Сферического Меркатора" в проекцию широты/долготы
vLat_Y = (2 * atan(exp((y) / cA)) - pi() / 2) * 180/pi()
vLong_Y = (x / cA) * 180/pi()
tmp_geo_Y:
Load
'$(vGeo)' as [$(F1)],
GeoMakePoint(Replace('$(vLat_Y)',',','.'),Replace('$(vLong_Y)',',','.')) as [$(F2)]
AutoGenerate 1;

vGeo = Null();
vLat = Null();
vlng = Null();
rLat = Null();
rLong = Null();
cA = Null();
cB = Null();
cF = Null();
cE = Null();
x = Null();
y = Null();
vLat_Y = Null();
vLong_Y = Null();
next;


Left Join ([$(Tb)])
Load
[$(F1)],
[$(F2)]
Resident tmp_geo_Y;
Drop Tables tmp_geo, tmp_geo_Y;
EndSub;

Пример использования:

1. Исходные данные:

map:
Load * Inline [
ID, lat, lng, address
Кр.площадь, 55.754193, 37.620752, 'Россия, Москва, Красная площадь'
];

Left Join
Load ID, GeoMakePoint(Replace(lat,',','.'),Replace(lng,',','.')) as Geo
Resident map;

Call getGeo_Yandex('map', 'Geo', 'Geo_Ya');

На выходе получаем поле Geo_Ya с пересчитанными координатами

2. Берем объект Карта и добавляем фоновый слой 

Формат: TMS

Адрес URL: ='http://vec04.maps.yandex.net/tiles?l=map&x={x}&y={y}&z={z}&lang=ru-RU'

3. Создаем слой точек

Измерение: ID

Местоположение: Geo_Ya

Sergey_Despot_0-1600343503117.png

 

Labels (2)
0 Replies