Openlayers v4.0.1はGoogle Maps JavaScript APIをサポートしていますか?


10

Openlayers(v4.0.1)の最新バージョンがGoogleマップをタイルレイヤーとしてサポートしているかどうかを知りたいです。これに関するドキュメントイオンは見つかりません。OpenlayersがGoogleマップをサポートしていない場合、これを行う方法があるかどうか誰かに教えてもらえますか?

回答:


23

私のWMSレイヤーの下で、このようにOpenLayers 4.2でGoogleマップを使用でき、EPSG:3857プロジェクションに完全に適合しています。

new ol.layer.Tile({source: new ol.source.TileImage({ url: 'http://khm{0-3}.googleapis.com/kh?v=742&hl=pl&&x={x}&y={y}&z={z}' })})

なぜプラグインが必要なのですか?

JSFiddle リンク

ロードマップ用

new ol.layer.Tile({ source: new ol.source.TileImage({ url: 'http://mt1.google.com/vt/lyrs=m@113&hl=en&&x={x}&y={y}&z={z}' })})

Geoserverまたは他のベクトルソースを使用しているときに、EPSG:3857プロジェクションで当てはまる問題に直面した場合。このように使う

new ol.layer.Tile({
        'title': 'Google Maps Uydu',
        'type': 'base',
         visible: true,
        'opacity': 1.000000,
         source: new ol.source.XYZ({
         attributions: [new ol.Attribution({ html: '<a href=""></a>' })],
         url: 'http://mt0.google.com/vt/lyrs=y&hl=en&x={x}&y={y}&z={z}&s=Ga'
         })
}),

驚くばかり!1日の前半全体をグーグルで処理した後、これは私に多くの作業を節約させた最良の解決策です!:)
AME 2017年

1
これは航空写真を示していますが、Googleマップに読み込まれるデフォルトのビューを表示するにはどうすればよいですか?
BiJ 2018

@BiJデフォルトビュー?ロードマップかハイブリッドか?この回答を定義するロードマップビュータイルを追加しました。
ÖmürBilgili

こんにちは、もう機能していません(404)回避策はありますか?
AlexandreMélard18年

1
こんにちは@AlexandreMélard私はこのコードサンプルとその作業を完全に更新しました。jsfiddle.net
omurbilgili /

7

ol.source.Tileを使用して、すべてのGoogleマップにアクセスできます。誰もが必要とする場合、これは、Openlayers 4で開発されたマップに追加するすべての利用可能なgoogle mapsレイヤーを作成するための基本的なコードです。

var googleLayerRoadNames=new ol.layer.Tile({
    title: "Google Road Names",
    source: new ol.source.TileImage({ url: 'http://mt1.google.com/vt/lyrs=h&x={x}&y={y}&z={z}' }),
});

var googleLayerRoadmap=new ol.layer.Tile({
    title: "Google Road Map",
    source: new ol.source.TileImage({ url: 'http://mt1.google.com/vt/lyrs=m&x={x}&y={y}&z={z}' }),
});

var googleLayerSatellite =new ol.layer.Tile({
    title: "Google Satellite",
    source: new ol.source.TileImage({ url: 'http://mt1.google.com/vt/lyrs=s&hl=pl&&x={x}&y={y}&z={z}' }),
});

var googleLayerHybrid =new ol.layer.Tile({
    title: "Google Satellite & Roads",
    source: new ol.source.TileImage({ url: 'http://mt1.google.com/vt/lyrs=y&x={x}&y={y}&z={z}' }),
});

var googleLayerTerrain =new ol.layer.Tile({
    title: "Google Terrain",
    source: new ol.source.TileImage({ url: 'http://mt1.google.com/vt/lyrs=t&x={x}&y={y}&z={z}' }),
});

var googleLayerHybrid2 =new ol.layer.Tile({
    title: "Google Terrain & Roads",
    source: new ol.source.TileImage({ url: 'http://mt1.google.com/vt/lyrs=p&x={x}&y={y}&z={z}' }),
}); 

var googleLayerOnlyRoad=new ol.layer.Tile({
    title: "Google Road without Building",
    source: new ol.source.TileImage({ url: 'http://mt1.google.com/vt/lyrs=r&x={x}&y={y}&z={z}' }),
});

3
これを使用する場合は注意してください。これはGoogleマップの利用規約への直接の違反であり、問​​題が発生する可能性があります。
Alex McMillan

トラフィックレイヤーはどう
ですか

このページによるとblinktag.com/google-transit-layer-through-google-maps-api トラフィック層のためのあなたは、このURLを使用する:mt1.google.com/vt/...を ...しかし、アレックスマクミランによって示されるように、 Google以外のライブラリ内でGoogleマップを使用することは、利用規約違反です。
アレッサンドロ・バッティスティーニ

5

いいえ、そうではありません。GMapを使用したタイルへの直接アクセスがないため、おそらくサポートされません。私が知っている唯一のオプションは、次のようなものです:https : //github.com/mapgears/ol3-google-maps


1
私はここで何が問題なのかわかりませんでしたが、ÖmürBilgiliは既に正常に動作するサンプルコードを提供しています。
Atul Sureka

2
それは機能しますが、それは彼らの利用規約の違反です。
bartvde 2017年

3

この問題についてもう1つ考えてみましょう。:タイルは、以下のアドレスで入手可能であるmaps.google.com/maps/... OpenLayersをし、GoogleマップAPI自体の以前のバージョンで利用されています。唯一の問題は、pbパラメータの意味を見つけることです。
MichałOkulewicz

まだ全体のpb引数はわかりませんが、タイルのX、Y、およびZOOMは次のようにマークされています。 1E0 2SM 3i3175062737 3m9 2spl 3sUS 5E18 12m1 1e47 12立方メートル1e37 2M1 1ssmartmaps 4e0!!!!!!!!!!!!!
のMichałOkulewicz

1
これは合法的なアプローチではないかと思う
bartvde 2017年

3
私は気づいていなかったが、@bartvdeは右である:サービスを通じて以外にはAPIへのアクセスやコンテンツ
のMichałOkulewicz

1

Googleマップをopenlayersに含める方法があります。私のコードをコピーできます。(TypeScript)


import {Layer} from './../abstract-layer';
import {Injectable} from '@angular/core';

declare var ol: any; declare var window: any;

@Injectable() export class GoogleLayers extends Layer { private layers = []; private language = 'en'; private country = 'US';

constructor() { super(); var me = this; let layerRoad = new ol.layer.Tile({ visible: false, preload: Infinity, source: new ol.source.TileImage({ wrapX: true, maxZoom: 19, url: `http://maps.google.de/maps/vt?pb=!1m5!1m4!1i{z}!2i{x}!3i{y}!4i256!2m3!1e0!2sm!3i375060738!3m9!2s${this.language}!3s${this.country.toUpperCase()}!5e18!12m1!1e47!12m3!1e37!2m1!1ssmartmaps!4e0` }) }); layerRoad.displayName = 'Google Maps Road'; let layerSatelliet = new ol.layer.Tile({ visible: false, preload: Infinity, source: new ol.source.TileImage({ maxZoom: 19, wrapX: true, url: `https://www.google.de/maps/vt/pb=!1m5!1m4!1i{z}!2i{x}!3i{y}!4i256!2m2!1e1!3i762!3m9!2s${this.language}!3s${this.country.toUpperCase()}!5e1105!12m1!1e4!12m1!1e47!12m1!1e3!4e0!5m1!1e0` }) }); layerSatelliet.displayName = 'Google Maps Satellit'; this.layers.push(layerRoad); this.layers.push(layerSatelliet); } getLayers() { return this.layers; } }

ここに画像の説明を入力してください


-1

Openlayersは、バージョン3以降のGoogleマップのサポートを停止しました。Openlayersの代わりにリーフレットを使用してみてください。これは軽量で、Openlayersのほとんどの機能を備えています。不足しているものがあれば、簡単にプラグインとして追加できます。ol.layer.Tileを使用してGoogleマップを追加すると、Googleのライセンス契約に違反します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.