2016-10-28 1 views
2

У меня есть приложение SAPUI5, которое должно отображать пятна на элементе управления GeoMap. Он отлично работает, пока я использую HEREMaps в качестве поставщика. Однако компания хотела бы, чтобы я использовал Карты Google. Я не могу найти никакой информации о том, как настроить MapProvider для элемента управления GeoMap для использования Карт Google.Как использовать Карты Google с помощью элемента управления GeoMap SAPUI5

Здесь (в основном) мой контроль 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 Maps? Как настроен MapProvider?

Спасибо.

+0

Это выполнимо .. его очень похож на один из приведенных выше .. Вы можете иметь РОМ для отображения холста и карты загрузки onAfter рендеринга в контроллере .. –

+0

Спасибо за ответ. Да, все, кажется, думают, что это выполнимо, но никто, кажется, не знает, что добавить в URL или для имени. Если вы знаете специфику, можете ли вы поделиться ими? Благодарю. – donkeyhotay

+0

http://jasper07.secondphase.com.au/openui5-googlemaps/ –

ответ

1

Update

Так что я, наконец смог обернуть это. Существует официальный способ доступа к картографическим картам googles напрямую, используя Tiles API. Следуя руководству по ссылке, вы можете настроить MapConfig, как показано ниже, с URL-адресом из API Tiles.

Но этот API недоступен без платного плана! (Этот план работает примерно в 10 раз дороже, чем использование JS API). В связи с этим я больше не буду следить за этим.

Прошу прощения, что я до сих пор не понял этого, насколько я бы хотел. Следующая конфигурация - самая урезанная версия, которая делает трюк. Дело здесь в том, что вам нужен URL-адрес, чтобы напрямую получить фрагменты карты. С X и Y, определяющими плитки и {LOD} уровень детализации. Эти параметры не нужно заменять, но они будут установлены с помощью элемента управления GeoMap во время выполнения.

Основная причина, по которой я еще не опубликовал это, заключается в том, что - пока он работает на техническом уровне - все, что я прочитал до сих пор, указывает на то, что доступ к плиткам напрямую противоречит ToS карт Google. Поэтому, пока он работает для возиться, я бы не использовал это в производственной среде! В настоящее время я пытаюсь найти способ прояснить, есть ли что-то в лицензировании, чтобы включить это использование или я являюсь 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)" 
       } 
     }] 
    }; 
+0

Ах. Спасибо за обновление. Да, если это против ToS, это было бы неплохо для производства. С тех пор я получил библиотеку openua5 googlemaps для работы в своем приложении, и я думаю, что эта библиотека будет служить нашим целям на данный момент. Я ценю ваш обмен кодом. – donkeyhotay

+0

Эй, просто немного поработал и обновил ответ, чтобы настроить Google Maps таким образом, чтобы он не нарушал ToS. Пожалуйста, также принимайте ответ, если он решает вопрос. – Carsten

+0

Спасибо, Карстен. Я попробую, когда у меня появится шанс. Я ценю помощь! – donkeyhotay

Смежные вопросы