10.01.2024 16:24:58
Для QDMapView методов вычисления масштаба по фрейму и переход в центр изображения нет.
Тексты таких методов из GIS ToolKit ниже. Полные исходные тексты [URL=https://gisinfo.ru/download/?id=312]https://gisinfo.ru/download/?id=312[/URL] Установить масштаб для отображения заданного фрагмента целиком в окне.
procedure ScaleByFrame(const frame: TDFRAME; place: TPPLACE); Описание: Метод устанавливает текущий масштаб отображения карты таким образом, чтобы заданный фрагмент целиком отображался в окне. Фрагмент задается прямоугольной областью, которая указывается посредством координат левого нижнего и правого верхнего углов. Координаты этих могут быть заданы либо структурой TDFRAME (X1,Y1 - левый нижний угол, X2,Y2 - правый верхний угол), либо двумя точками TDOUBLEPOINT. Координаты могут быть заданы в разном формате представления координат – в радианах, в метрах, в пикселях экрана. В каком именно виде представлены координаты, определяется параметром place. //========================================================== // Установить масштаб для отображения заданного фрагмента в окне // фрагмент - X1,Y1 - левый нижний угол, X2,Y2 - правый верхний угол //========================================================== procedure TMapViewWindow.ScaleByFrame(const frame: TDFRAME; place: TPPLACE); var dmapframe: TMAPDFRAME; scale1, scale2, realscale : double; rend: boolean; tp : TDOUBLEPOINT; begin if MapHandle = 0 then exit; dmapframe.X1 := frame.X1; dmapframe.Y1 := frame.Y1; dmapframe.X2 := frame.X2; dmapframe.Y2 := frame.Y2; dmapframe := ConvertDFrame(dmapframe, place, PP_PICTURE); tp.X := dmapframe.X1 + (dmapframe.X2 - dmapframe.X1)/2; tp.Y := dmapframe.Y1 + (dmapframe.Y2 - dmapframe.Y1)/2; ConvertMetric(tp.X, tp.Y, PP_PICTURE, PP_GEO); scale1 := (Abs(dmapframe.X2 - dmapframe.X1) / ClientWidth); scale2 := (Abs(dmapframe.Y2 - dmapframe.Y1) / ClientHeight); scale1 := Max(scale1, scale2); realscale := mapGetRealShowScale(MapHandle); scale2 := scale1 * realscale; rend := FRendering; Rendering := false; SetViewScale(trunc(scale2)); SetCenter(tp, PP_GEO); Rendering := rend; end; //========================================================== // установить указанную точку в центр карты //========================================================== procedure TMapViewWindow.SetCenter(const aPoint : TDOUBLEPOINT; aPlaceIn : TPPLACE = PP_PLANE); var pp: TDOUBLEPOINT; ii : integer; hh1 : double; begin if MapHandle = 0 then exit; pp := aPoint; ii := 1; hh1 := 0; case aPlaceIn of PP_PLANE : mapPlaneToPicture(MapHandle, pp.X, pp.Y); PP_MAP : mapMapToPicture(MapHandle, pp.X, pp.Y); PP_GEO : begin ii := mapGeoToPlane(MapHandle, pp.X, pp.Y); if (ii <> 0) then mapPlaneToPicture(MapHandle, pp.X, pp.Y); end; PP_GEOWGS84 : begin ii := mapGeoWGS84ToPlane3D(MapHandle, pp.X, pp.Y, hh1); if (ii <> 0) then mapPlaneToPicture(MapHandle, pp.X, pp.Y); end; end; if (ii <> 0) then begin MapLeft := round(pp.X) - round(ClientWidth div 2); MapTop := round(pp.Y) - round(ClientHeight div 2); end; end; //==========================================================
Изменено: |
|
|
© КБ Панорама, 1991-2024 Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности |