如何在 SAPUI5 GeoMap 控件中使用 Google 地图
How to use Google Maps with SAPUI5 GeoMap control
我有一个 SAPUI5 应用程序需要在 GeoMap 控件上绘制点。只要我使用 HEREMaps 作为提供者,它就可以正常工作。但是,公司希望我使用 Google 地图。我找不到任何关于如何为 GeoMap 控件设置 MapProvider 以使用 Google 地图的信息。
这是(基本上)我的 GeoMap 控件:
<vk:content>
<vk:ContainerContent title="Map" icon="sap-icon://choropleth-chart">
<vk:content>
<vbm:GeoMap id="GeoMap" width="100%" height="100%">
<vbm:vos>
<vbm:Spots
click="onClickItem"
contextMenu="onContextMenuItem"
id="caseTimeMapSpots"
items="{path: '/CaseEvents/results'}"
posChangeable="true"
scaleChangeable="true"
>
<vbm:items>
<vbm:Spot
id="Spot"
position="{Longitude};{Latitude};0"
tooltip="{EventName} - {path: 'EventDatetime', formatter: '.formatDate'} {path: 'EventDatetime', formatter: '.formatTime'}"
type="Warning"
click="onClickSpot"
contextMenu="onContextMenuSpot"
text="{EventName}"
scale="{path: 'DeleteInd', formatter: '.formatScale'}"
/>
</vbm:items>
</vbm:Spots>
</vbm:vos>
</vbm:GeoMap>
</vk:content>
</vk:ContainerContent>
</vk:content>
这里是我在控制器中设置 MapProvider 的地方:
var oGeoMap = this.getView().byId("GeoMap");
var oMapConfig = {
"MapProvider": [{
"name": "HEREMAPS",
"type": "",
"description": "",
"tileX": "256",
"tileY": "256",
"maxLOD": "20",
"copyright": "Tiles Courtesy of HERE Maps",
"Source": [
{
"id": "s1",
"url": "https://1.base.maps.cit.api.here.com/maptile/2.1/maptile/newest/normal.day/{LOD}/{X}/{Y}/256/png8?app_id=XXX"
},
{
"id": "s2",
"url": "https://2.base.maps.cit.api.here.com/maptile/2.1/maptile/newest/normal.day/{LOD}/{X}/{Y}/256/png8?app_id=XXX"
}
]
}],
"MapLayerStacks": [{
"name": "DEFAULT",
"MapLayer": {
"name": "layer1",
"refMapProvider": "HEREMAPS",
"opacity": "1.0",
"colBkgnd": "RGB(255,255,255)"
}
}]
};
oGeoMap.setMapConfiguration(oMapConfig);
oGeoMap.setRefMapLayerStack("DEFAULT");
oGeoMap.setInitialZoom(13);
oGeoMap.setInitialPosition("-97.57;35.57;0");
有人使用 Google 地图做过吗? MapProvider 是如何设置的?
谢谢。
更新
所以我终于可以总结一下了。有一种官方方法可以直接使用 Tiles API 访问 googles 地图图块。
按照 link 中的指南,您可以使用 Tiles API.
中的 URL 配置如下所示的 MapConfig
但是如果没有付费计划,这个 API 是不可用的! (虽然这个计划 运行 比 JS API 的使用贵 10 倍左右)因此我不会进一步跟进。
很抱歉,我还没有把它想明白到我想要的程度。以下配置是最精简的版本,可以解决问题。这里的要点是您需要 url 才能直接获取地图图块。 X 和 Y 指定图块,{LOD} 指定细节级别。这些参数不必替换,但会在 运行 时间内由 GeoMap 控件设置。
我还没有发布这个的主要原因是——虽然它在技术层面上工作——到目前为止我读到的所有内容都表明直接访问磁贴违反了 Google 地图。因此,虽然它在摆弄周围,但我不会在生产环境中使用它!目前我正在尝试找到一种方法来澄清许可中是否有某些内容可以启用此用途,或者我是否是 SOL。
不幸的是,官方API 没有提供请求特定地图图块的方法。解决这个问题的另一种方法是查看 SAP can/does 是否提供不同的 MapProvider 实现。
var oMapConfig = {
"MapProvider": [{
"name": "GMAP",
"Source": [{
"id": "s1",
"url": "https://mt.google.com/vt/x={X}&y={Y}&z={LOD}"
}]
}],
"MapLayerStacks": [{
"name": "DEFAULT",
"MapLayer": {
"name": "layer1",
"refMapProvider": "GMAP",
"opacity": "1",
"colBkgnd": "RGB(255,255,255)"
}
}]
};
我有一个 SAPUI5 应用程序需要在 GeoMap 控件上绘制点。只要我使用 HEREMaps 作为提供者,它就可以正常工作。但是,公司希望我使用 Google 地图。我找不到任何关于如何为 GeoMap 控件设置 MapProvider 以使用 Google 地图的信息。
这是(基本上)我的 GeoMap 控件:
<vk:content>
<vk:ContainerContent title="Map" icon="sap-icon://choropleth-chart">
<vk:content>
<vbm:GeoMap id="GeoMap" width="100%" height="100%">
<vbm:vos>
<vbm:Spots
click="onClickItem"
contextMenu="onContextMenuItem"
id="caseTimeMapSpots"
items="{path: '/CaseEvents/results'}"
posChangeable="true"
scaleChangeable="true"
>
<vbm:items>
<vbm:Spot
id="Spot"
position="{Longitude};{Latitude};0"
tooltip="{EventName} - {path: 'EventDatetime', formatter: '.formatDate'} {path: 'EventDatetime', formatter: '.formatTime'}"
type="Warning"
click="onClickSpot"
contextMenu="onContextMenuSpot"
text="{EventName}"
scale="{path: 'DeleteInd', formatter: '.formatScale'}"
/>
</vbm:items>
</vbm:Spots>
</vbm:vos>
</vbm:GeoMap>
</vk:content>
</vk:ContainerContent>
</vk:content>
这里是我在控制器中设置 MapProvider 的地方:
var oGeoMap = this.getView().byId("GeoMap");
var oMapConfig = {
"MapProvider": [{
"name": "HEREMAPS",
"type": "",
"description": "",
"tileX": "256",
"tileY": "256",
"maxLOD": "20",
"copyright": "Tiles Courtesy of HERE Maps",
"Source": [
{
"id": "s1",
"url": "https://1.base.maps.cit.api.here.com/maptile/2.1/maptile/newest/normal.day/{LOD}/{X}/{Y}/256/png8?app_id=XXX"
},
{
"id": "s2",
"url": "https://2.base.maps.cit.api.here.com/maptile/2.1/maptile/newest/normal.day/{LOD}/{X}/{Y}/256/png8?app_id=XXX"
}
]
}],
"MapLayerStacks": [{
"name": "DEFAULT",
"MapLayer": {
"name": "layer1",
"refMapProvider": "HEREMAPS",
"opacity": "1.0",
"colBkgnd": "RGB(255,255,255)"
}
}]
};
oGeoMap.setMapConfiguration(oMapConfig);
oGeoMap.setRefMapLayerStack("DEFAULT");
oGeoMap.setInitialZoom(13);
oGeoMap.setInitialPosition("-97.57;35.57;0");
有人使用 Google 地图做过吗? MapProvider 是如何设置的?
谢谢。
更新
所以我终于可以总结一下了。有一种官方方法可以直接使用 Tiles API 访问 googles 地图图块。 按照 link 中的指南,您可以使用 Tiles API.
中的 URL 配置如下所示的 MapConfig但是如果没有付费计划,这个 API 是不可用的! (虽然这个计划 运行 比 JS API 的使用贵 10 倍左右)因此我不会进一步跟进。
很抱歉,我还没有把它想明白到我想要的程度。以下配置是最精简的版本,可以解决问题。这里的要点是您需要 url 才能直接获取地图图块。 X 和 Y 指定图块,{LOD} 指定细节级别。这些参数不必替换,但会在 运行 时间内由 GeoMap 控件设置。
我还没有发布这个的主要原因是——虽然它在技术层面上工作——到目前为止我读到的所有内容都表明直接访问磁贴违反了 Google 地图。因此,虽然它在摆弄周围,但我不会在生产环境中使用它!目前我正在尝试找到一种方法来澄清许可中是否有某些内容可以启用此用途,或者我是否是 SOL。
不幸的是,官方API 没有提供请求特定地图图块的方法。解决这个问题的另一种方法是查看 SAP can/does 是否提供不同的 MapProvider 实现。
var oMapConfig = {
"MapProvider": [{
"name": "GMAP",
"Source": [{
"id": "s1",
"url": "https://mt.google.com/vt/x={X}&y={Y}&z={LOD}"
}]
}],
"MapLayerStacks": [{
"name": "DEFAULT",
"MapLayer": {
"name": "layer1",
"refMapProvider": "GMAP",
"opacity": "1",
"colBkgnd": "RGB(255,255,255)"
}
}]
};