Google maps 如何将Google地图与SAPUI5 GeoMap控件结合使用

Google maps 如何将Google地图与SAPUI5 GeoMap控件结合使用,google-maps,sapui5,sap-fiori,geomap,Google Maps,Sapui5,Sap Fiori,Geomap,我有一个SAPUI5应用程序,需要在GeoMap控件上绘制点。只要我使用HEREMaps作为提供者,它就可以正常工作。然而,公司希望我使用谷歌地图。我找不到任何关于如何为GeoMap控件设置MapProvider以使用Google Maps的信息 以下是(基本上)我的GeoMap控件: <vk:content> <vk:ContainerContent title="Map" icon="sap-icon:

我有一个SAPUI5应用程序,需要在GeoMap控件上绘制点。只要我使用HEREMaps作为提供者,它就可以正常工作。然而,公司希望我使用谷歌地图。我找不到任何关于如何为GeoMap控件设置MapProvider以使用Google Maps的信息

以下是(基本上)我的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是如何设置的


谢谢。

更新

所以我终于可以结束了。有一种官方的方式可以直接使用谷歌地图。 按照链接中的指南,您可以使用Tiles API中的URL配置下面的MapConfig

但是如果没有付费计划,这个API是不可用的!(这个计划的运行成本大约是JSAPI使用成本的10倍)因此,我将不再继续跟进


很抱歉,我还没有把这个问题解决到我想要的程度。下面的配置是实现此功能的最精简版本。这里的要点是,您需要url来直接获取地图分幅。用X和Y指定瓷砖和{LOD}详细程度。这些参数不必替换,但将在运行时由GeoMap控件设置

我还没有发布这篇文章的主要原因是——虽然它在技术层面上起作用——到目前为止,我读到的所有内容都表明,直接访问这些贴片是违反谷歌地图的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)"
                }
        }]
    };

这是可行的。。它与上面的很相似。。您可以将dom用于贴图画布,并在控制器中渲染后加载贴图。谢谢您的回复。是的,每个人似乎都认为这是可行的,但似乎没有人知道该为URL或名称输入什么。如果你知道细节,你能分享吗?谢谢。刚刚开始工作,一旦我完全弄明白了,就会用答案更新,可以提供一个很好的参考。谢谢,卡斯滕。我期待着听到这个消息。谢谢你的更新。是的,如果它是反对ToS的,它的生产将是不确定的。我已经让openui5 googlemaps库在我的应用程序中运行,我认为该库现在可以满足我们的目的。我很感谢你分享代码。嘿,只是做了一点跟进,并更新了答案,以一种不违反ToS的方式配置谷歌地图。如果答案能解决问题,也请接受。谢谢,卡斯滕。有机会的话我会试试的。我感谢你的帮助!卡斯滕,我今天试着用你的代码,效果很好。非常感谢您的分享。我已将你的回答标记为回答,我希望能送你一瓶苏格兰威士忌;-)
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)"
                }
        }]
    };