uniquename писал(а):Относительно какой точки это смещение?
Хоспаде. Это перевод в метрику и обратно с эллипсоида. Подробности - в вики по слову "Меркатор".
uniquename писал(а):если бы скажем полученные x,y - были расстоянием от верхнего левого угла (та хоть от центра экрана), то дальше рассчитать точки не проблема
Надо рисовать в экранных кооржинатах, или "на эллипсоиде"? Это совершнно разные вещи.
Если VMetrDiff: TDoublePoint - это смещение, на которое надо сдвинуть точку AXY_Pont: TDoublePoint, а asign: ShortInt - это направление сдвига (удобно передавать отдельный признак 1 или -1, чтобы оборачивать сдвиг без правки ег овеличин) то:
1. Если считаем с косинусом широты - для реальных длин - то VCos:=asign/cos(AXY_Pont.Y*(pi/180)), иначе VCos:=asign (при этом длины будут в "попугаях" в зависимости от широты).
2. Дальше выполняем нечто такое:
Vmetr:=FCurrentMap.GeoConvert.LonLat2Metr(AXY_Pont);
Vmetr.X:=Vmetr.X+VCos*VMetrDiff.X;
Vmetr.Y:=Vmetr.Y+VCos*VMetrDiff.Y;
AXY_Pont:=FCurrentMap.GeoConvert.Metr2LonLat(Vmetr);
Если рисовать сектор как ГМТ, равноудалённых от центра окружности сектор внутри некоторого угла - соответственно считать надо с косинусом ширины.
Разбить дугу сектора на N точек и для каждой посчитать смещение в метрах относительно центра (по x и y).
А дальше позвать описанную выше методу для каждой точки на дуге сектора, то есть AXY_Pont - будет центр окружности сектора, а VMetrDiff - соответственно смещения в метрах для каждой точки.
Это будет верно, если окружность не слишком большая.