如何将Google Maps与SAPUI5 GeoMap控件一起使用

时间:2016-10-28 16:03:16

标签: google-maps sapui5 sap-fiori geomap

我有一个需要在GeoMap控件上绘制斑点的SAPUI5应用程序。它工作正常,只要我使用HEREMaps作为提供者。但是,该公司希望我使用谷歌地图。我找不到任何有关如何为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是如何设置的?

感谢。

1 个答案:

答案 0 :(得分:2)

<强>更新

所以我最终能够把它包起来。有一种官方方法可以使用Tiles API直接访问Google地图图块。 按照链接中的指南,您可以使用Tiles API中的URL配置下面看到的MapConfig。

但如果没有付费方案,这个API就无法使用! (这个计划的运行成本比JS API的使用价格贵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)"
                }
        }]
    };