LazMapViewer: Refactor map provider identification. Issue #38279, patch by regs.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7947 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2020-12-30 10:31:41 +00:00
parent 9d506bfa25
commit 49db2e4ea8
2 changed files with 73 additions and 53 deletions

View File

@ -717,11 +717,12 @@ function TMapViewerEngine.ReadProvidersFromXML(AFileName: String;
lcName: String;
begin
lcName := LowerCase(AName);
case lcName of
'letter': Result := @GetLetterSvr;
'yahoo': Result := @GetYahooSvr;
else Result := nil;
end;
if lcName = LowerCase(SVR_LETTER) then
Result := @GetSvrLetter
else if lcName = LowerCase(SVR_BASE1) then
Result := @GetSvrBase1
else
Result := nil;
end;
function GetValStr(AName: String): TGetValStr;
@ -729,12 +730,14 @@ function TMapViewerEngine.ReadProvidersFromXML(AFileName: String;
lcName: String;
begin
lcName := Lowercase(AName);
case lcName of
'quadkey': Result := @GetQuadKey;
'yahooy': Result := @GetYahooY;
'yahooz': Result := @GetYahooZ;
else Result := nil;
end;
if lcName = LowerCase(STR_QUADKEY) then
Result := @GetStrQuadKey
else if lcName = LowerCase(STR_YAHOOY) then
Result := @GetStrYahooY
else if lcName = LowerCase(STR_YAHOOZ) then
Result := @GetStrYahooZ
else
Result := nil;
end;
function GetAttrValue(ANode: TDOMNode; AttrName: String): String;
@ -880,25 +883,25 @@ begin
// opeName, Url, MinZoom, MaxZoom, NbSvr, GetSvrStr, GetXStr, GetYStr, GetZStr
MapWin.MapProvider := AddMapProvider('OpenStreetMap Mapnik',
'http://%serv%.tile.openstreetmap.org/%z%/%x%/%y%.png',
0, 19, 3, @GetLetterSvr);
0, 19, 3, @GetSvrLetter);
AddMapProvider('Open Cycle Map',
'http://%serv%.tile.opencyclemap.org/cycle/%z%/%x%/%y%.png',
0, 18, 3, @getLetterSvr);
0, 18, 3, @GetSvrLetter);
AddMapProvider('Open Topo Map',
'http://%serv%.tile.opentopomap.org/%z%/%x%/%y%.png',
0, 19, 3, @getLetterSvr);
0, 19, 3, @GetSvrLetter);
AddMapProvider('Virtual Earth Bing',
'http://ecn.t%serv%.tiles.virtualearth.net/tiles/r%x%?g=671&mkt=en-us&lbl=l1&stl=h&shading=hill',
1, 19, 8, nil, @GetQuadKey);
1, 19, 8, nil, @GetStrQuadKey);
AddMapProvider('Virtual Earth Road',
'http://r%serv%.ortho.tiles.virtualearth.net/tiles/r%x%.png?g=72&shading=hill',
1, 19, 4, nil, @GetQuadKey);
1, 19, 4, nil, @GetStrQuadKey);
AddMapProvider('Virtual Earth Aerial',
'http://a%serv%.ortho.tiles.virtualearth.net/tiles/a%x%.jpg?g=72&shading=hill',
1, 19, 4, nil, @GetQuadKey);
1, 19, 4, nil, @GetStrQuadKey);
AddMapProvider('Virtual Earth Hybrid',
'http://h%serv%.ortho.tiles.virtualearth.net/tiles/h%x%.jpg?g=72&shading=hill',
1, 19, 4, nil, @GetQuadKey);
1, 19, 4, nil, @GetStrQuadKey);
if (HERE_AppID <> '') and (HERE_AppCode <> '') then begin
// Registration required to access HERE maps:
@ -909,19 +912,19 @@ begin
HERE1 := 'http://%serv%.base.maps.api.here.com/maptile/2.1/maptile/newest/';
HERE2 := '/%z%/%x%/%y%/256/png8?app_id=' + HERE_AppID + '&app_code=' + HERE_AppCode;
AddMapProvider('Here Maps', HERE1 + 'normal.day' + HERE2,
1, 19, 4, @GetYahooSvr);
1, 19, 4, @GetSvrBase1);
AddMapProvider('Here Maps Grey', HERE1 + 'normal.day.grey' + HERE2,
1, 19, 4, @GetYahooSvr);
1, 19, 4, @GetSvrBase1);
AddMapProvider('Here Maps Reduced', HERE1 + 'reduced.day' + HERE2,
1, 19, 4, @GetYahooSvr);
1, 19, 4, @GetSvrBase1);
AddMapProvider('Here Maps Transit', HERE1 + 'normal.day.transit' + HERE2,
1, 19, 4, @GetYahooSvr);
1, 19, 4, @GetSvrBase1);
AddMapProvider('Here POI Maps', HERE1 + 'normal.day' + HERE2 + '&pois',
1, 19, 4, @GetYahooSvr);
1, 19, 4, @GetSvrBase1);
AddMapProvider('Here Pedestrian Maps', HERE1 + 'pedestrian.day' + HERE2,
1, 19, 4, @GetYahooSvr);
1, 19, 4, @GetSvrBase1);
AddMapProvider('Here DreamWorks Maps', HERE1 + 'normal.day' + HERE2 + '&style=dreamworks',
1, 19, 4, @GetYahooSvr);
1, 19, 4, @GetSvrBase1);
end;
if (OpenWeatherMap_ApiKey <> '') then begin

View File

@ -77,21 +77,28 @@ type
end;
function GetLetterSvr(id: integer): String;
function GetYahooSvr(id: integer): String;
function GetYahooY(const Tile: TTileId): string;
function GetYahooZ(const Tile: TTileId): string;
function GetQuadKey(const Tile: TTileId): string;
function GetSvrLetter(id: integer): String;
function GetSvrBase1(id: integer): String;
function GetStrYahooY(const Tile: TTileId): string;
function GetStrYahooZ(const Tile: TTileId): string;
function GetStrQuadKey(const Tile: TTileId): string;
const
SVR_LETTER = 'Letter';
SVR_BASE1 = 'Base1';
STR_YAHOOY = 'YahooY'; // Idea: Deprecate, as Yahoo Maps are dead
STR_YAHOOZ = 'YahooZ'; // Idea: Deprecate, as Yahoo Maps are dead
STR_QUADKEY = 'QuadKey';
implementation
function GetLetterSvr(id: integer): String;
function GetSvrLetter(id: integer): String;
begin
Result := Char(Ord('a') + id);
end;
function GetQuadKey(const Tile: TTileId): string;
function GetStrQuadKey(const Tile: TTileId): string;
var
i, d, m: Longword;
begin
@ -110,17 +117,17 @@ begin
end;
end;
function GetYahooSvr(id: integer): String;
function GetSvrBase1(id: integer): String;
Begin
Result := IntToStr(id + 1);
end;
function GetYahooY(const Tile : TTileId): string;
function GetStrYahooY(const Tile : TTileId): string;
begin
Result := IntToStr( -(Tile.Y - (1 shl Tile.Z) div 2) - 1);
end;
function GetYahooZ(const Tile : TTileId): string;
function GetStrYahooZ(const Tile : TTileId): string;
Begin
result := IntToStr(Tile.Z + 1);
end;
@ -305,28 +312,38 @@ begin
layerNode.SetAttribute('maxZoom', IntToStr(FMaxZoom[i]));
layerNode.SetAttribute('serverCount', IntToStr(FNbSvr[i]));
if FGetSvrStr[i] = @getLetterSvr then s := 'Letter'
else if FGetSvrStr[i] = @GetYahooSvr then s := 'Yahoo'
else if FGetSvrstr[i] <> nil then s := 'unknown'
else s := '';
if s <> '' then layerNode.SetAttribute('serverProc', s);
if FGetSvrStr[i] = @GetSvrLetter then
s := SVR_LETTER
else if FGetSvrStr[i] = @GetSvrBase1 then
s := SVR_BASE1
else
s := '';
if s <> '' then
layerNode.SetAttribute('serverProc', s);
if FGetXStr[i] = @GetQuadKey then s := 'QuadKey'
else if FGetXStr[i] <> nil then s := '(unknown)'
else s := '';
if s <> '' then layerNode.SetAttribute('xProc', s);
if FGetXStr[i] = @GetStrQuadKey then
s := STR_QUADKEY
else
s := '';
if s <> '' then
layerNode.SetAttribute('xProc', s);
if FGetYStr[i] = @GetQuadKey then s := 'QuadKey'
else if FGetYStr[i] = @GetYahooY then s := 'YahooY'
else if FGetYStr[i] <> nil then s := '(unknown)'
else s := '';
if FGetYStr[i] = @GetStrQuadKey then
s := STR_QUADKEY
else if FGetYStr[i] = @GetStrYahooY then
s := STR_YAHOOY
else
s := '';
if s <> '' then layerNode.SetAttribute('yProc', s);
if FGetZStr[i] = @GetQuadKey then s := 'QuadKey'
else if FGetZStr[i] = @GetYahooZ then s := 'YahooZ'
else if FGetZStr[i] <> nil then s := '(unknown)'
else s := '';
if s <> '' then layerNode.SetAttribute('zProc', s);
if FGetZStr[i] = @GetStrQuadKey then
s := STR_QUADKEY
else if FGetZStr[i] = @GetStrYahooZ then
s := STR_YAHOOZ
else
s := '';
if s <> '' then
layerNode.SetAttribute('zProc', s);
end;
end;