Преобразование пикселей в лат / долготу для плана этажа в QlikSense - PullRequest
0 голосов
/ 10 февраля 2020

Размещение моего вопроса здесь, чтобы охватить больше аудитории. Я разместил этот вопрос в сообществе Qliksense в неделю go.

Я последовал примеру Кристофа в его руководстве по созданию планов этажей офиса ( Планы этажей Qlik Sense для офиса с помощью собственного GeoObject ), и может копировать свою работу со слоем Point. Теперь на панели инструментов я бы хотел переключиться на другой слой (Layer / Area) вместо (Layer / Point), чтобы нарисовать область на карте, чтобы выделить элемент (например, торговый автомат или стол) на плане этажа. Я понимаю, что для того, чтобы нарисовать область, нам нужны четыре координаты, то есть [[x, y], [x2, y2], [x3, y3], [x4, y4]]. Я включил все четыре координаты элемента в таблицу, импортированную на приборную панель.

Единицы для этих координат указаны в пикселях, измеренных с помощью Irfanview, и выглядят так:

Item | X | Y | X2 | Y2 | X3 | Y3 | X4 | Y4
Table | 30 | 98 | 90 | 100 | 30 | 120 | 90 | 120
Vending Machine | 1475 | 99 | 1536 | 99 | 1475 | 121 | 1536 | 121

Использование Эти значения я определил новое измерение («Area_Coordinates»), которое будет включать эти четыре пары значений в следующем формате: «[[x, y], [x2, y2], [x3, y3], [x4, y4]]». Area_Coordinates, новое измерение, будет затем помещено в данные слоя области.

Текущий размер моего фонового изображения в пикселях составляет 1570 x 265, и он использует проекцию, определенную пользователем (в метрах) в настройках карты, как определяет видео. Однако проблема здесь в том, что я не вижу ничего выделенного на карте. В соответствии с ссылкой на изображение в ссылке проекта Кристофа *1016* Github, я должен преобразовать пиксель координат в проекцию широты / долготы? Я пробовал это преобразование в Area_Coordinates, но безуспешно (я не вижу ни одного выделенного / цветного поля). У кого-нибудь есть хорошие идеи, чтобы решить эту проблему?

Некоторые примеры формул, которые я пробовал:

1)//https://gis.stackexchange.com/questions/228489/how-to-convert-image-pixel-to-latitude-and-longitude
//mx = C + px * A
//my = F + py * D
='[[' & Round((RangeMax(X,Y)/2 - X/2) * 40075014 / RangeMax(X,Y) - 20037507) & ',' & Round((RangeMax(X,Y)/2 - Y/2) * -40075014 / RangeMax(X,Y) + 20037507) & '],'
& '[' & Round((RangeMax(X2,Y2)/2 - X2/2) * 40075014 / RangeMax(X2,Y2) - 20037507) & ',' & Round((RangeMax(X2,Y2)/2 - Y2/2) * -40075014 / RangeMax(X2,Y2) + 20037507) & '],'
& '[' & Round((RangeMax(X3,Y3)/2 - X3/2) * 40075014 / RangeMax(X3,Y3) - 20037507) & ',' & Round((RangeMax(X3,Y3)/2 - Y3/2) * -40075014 / RangeMax(X3,Y3) + 20037507) & '],'
& '[' & Round((RangeMax(X4,Y4)/2 - X4/2) * 40075014 / RangeMax(X4,Y4) - 20037507) & ',' & Round((RangeMax(X4,Y4)/2 - Y4/2) * -40075014 / RangeMax(X4,Y4) + 20037507) & ']]'

2) //SET fX2Long = Round((RangeMax($2,$3)/2 - $2/2 + $1) * 40075014 / RangeMax($2,$3) - 20037507);
//SET fY2Lat = Round((RangeMax($2,$3)/2- $3/2 + $1) * -40075014 / RangeMax($2,$3) + 20037507);
$(fX2Long(X, vWidth, vHeight))
$(fY2Lat(Y, vWidth, vHeight))
='[[' & Round((RangeMax(W,L)/2- L/2 + X) * -40075014 / RangeMax(W,L) + 20037507) & ',' & Round((RangeMax(W,L)/2 - L/2 + Y) * 40075014 / RangeMax(W,L) - 20037507) & '],'
& '[' & Round((RangeMax(W,L)/2- L/2 + X2) * -40075014 / RangeMax(W,L) + 20037507) & ',' & Round((RangeMax(W,L)/2 - L/2 + Y2) * 40075014 / RangeMax(W,L) - 20037507) & '],'
& '[' & Round((RangeMax(W,L)/2- L/2 + X3) * -40075014 / RangeMax(W,L) + 20037507) & ',' & Round((RangeMax(W,L)/2 - L/2 + Y3) * 40075014 / RangeMax(W,L) - 20037507) & '],'
& '[' & Round((RangeMax(W,L)/2- L/2 + X4) * -40075014 / RangeMax(W,L) + 20037507) & ',' & Round((RangeMax(W,L)/2 - L/2 + Y4) * 40075014 / RangeMax(W,L) - 20037507) & ']]'

3) Adding GeoMakePoint to no. 2 - 
='[[' & GeoMakePoint(Round((RangeMax(W,L)/2- L/2 + X) * -40075014 / RangeMax(W,L) + 20037507), Round((RangeMax(W,L)/2 - L/2 + Y) * 40075014 / RangeMax(W,L) - 20037507)) & '],'
& '[' & GeoMakePoint(Round((RangeMax(W,L)/2- L/2 + X2) * -40075014 / RangeMax(W,L) + 20037507), Round((RangeMax(W,L)/2 - L/2 + Y2) * 40075014 / RangeMax(W,L) - 20037507)) & '],'
& '[' & GeoMakePoint(Round((RangeMax(W,L)/2- L/2 + X3) * -40075014 / RangeMax(W,L) + 20037507), Round((RangeMax(W,L)/2 - L/2 + Y3) * 40075014 / RangeMax(W,L) - 20037507)) & '],'
& '[' & GeoMakePoint(Round((RangeMax(W,L)/2- L/2 + X4) * -40075014 / RangeMax(W,L) + 20037507), Round((RangeMax(W,L)/2 - L/2 + Y4) * 40075014 / RangeMax(W,L) - 20037507)) & ']]'
...