我有一个SAPUI5应用程序,需要在GeoMap控件上绘制点。只要我使用HEREMaps作为提供程序,它就能正常工作。然而,该公司希望我使用谷歌地图。我找不到任何关于如何为MapProvider控件设置GeoMap控件使用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");有人用谷歌地图做过这种事吗?MapProvider是如何设置的?
谢谢。
发布于 2016-11-23 13:38:20
更新
所以我终于可以结束这件事了。有一种使用Tiles API直接访问googles映射块的官方方法。按照链接中的指南,您可以使用来自Tiles API的URL配置下面看到的MapConfig。
但是,如果没有付费计划,这个API是不可用的!(这个计划比JS的使用成本高出大约10倍),由于这个原因,我将不再跟进这个问题。
很抱歉,我还没有想出我想做的事情。下面的配置是执行此任务的最简化的版本。这里的要点是,您需要url直接获取地图块。使用X和Y指定tiles,并指定详细信息级别{LOD}。这些参数不必替换,但将在运行时由GeoMap控件设置。
--我还没有发布这篇文章的主要原因--是因为--尽管它是在技术层面上工作--我迄今所读到的一切都表明,直接访问这些瓷砖是违反Google的ToS的。因此,虽然它是工作的摆弄周围,我不会使用在一个生产环境!目前,我正试图找出一种方法来澄清许可中是否有允许使用的东西,或者我是否是SOL.。
不幸的是,官方API没有提供一种请求特定地图块的方法。另一种解决这一问题的方法是查看SAP是否能够/确实提供不同的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)"
}
}]
};https://stackoverflow.com/questions/40308969
复制相似问题