Представленная ниже процедура берет координаты в формате 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
