Openlayers v4.0.1 mendukung Google Maps Javascript API?

10

Saya ingin tahu apakah versi terbaru Openlayers (v4.0.1) mendukung Google Maps sebagai Tile Layer. Saya tidak dapat menemukan dokumen ion tentang ini. Jika Openlayers tidak mendukung Google Maps, dapatkah seseorang memberi tahu saya jika ada cara untuk melakukan ini?

E. Silveira
sumber

Jawaban:

23

Saya dapat menggunakan Google Maps di OpenLayers 4.2 seperti ini di bawah lapisan WMS saya dan sangat cocok dengan proyeksi 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}' })})

Mengapa Anda membutuhkan plugin?

Tautan JSFiddle

untuk ROADMAP

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}' })})

Jika Anda menghadapi masalah yang sesuai dengan proyeksi EPSG: 3857 ketika Anda menggunakan Geoserver atau sumber vektor lainnya; gunakan seperti ini

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'
         })
}),
Ömür Bilgili
sumber
Luar biasa! Setelah googling sepanjang setengah hari pertama, ini adalah solusi terbaik yang menyelamatkan saya dari banyak pekerjaan! :)
AME
1
Ini menunjukkan tampilan satelit, bagaimana saya bisa menampilkan tampilan default yang dimuat di google map?
BiJ
@BiJ tampilan default? roadmap atau hybrid? Saya menambahkan ubin tampilan peta jalan menentukan jawaban ini.
Ömür Bilgili
Hai, ini tidak berfungsi lagi (404) Apakah Anda punya solusinya?
Alexandre Mélard
1
Hai @ AlexandreMélard Saya memperbarui contoh kode ini dan kerjanya dengan sempurna, jsfiddle.net/omurbilgili/eyytw0gc/569
Ömür Bilgili
7

Mungkin bagi kami ol.source.Tile untuk mengakses setiap peta google. Untuk semua orang yang membutuhkannya, ini adalah kode dasar untuk membuat setiap lapisan google maps yang tersedia untuk ditambahkan ke peta yang dikembangkan di Openlayers 4:

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}' }),
});
Alessandro Battistini
sumber
3
Hati-hati jika Anda berencana untuk menggunakan ini; ini merupakan pelanggaran langsung terhadap persyaratan layanan Google Maps dan Anda kemungkinan akan mendapat masalah.
Alex McMillan
bagaimana dengan layer traffic
Saroj
Menurut halaman ini blinktag.com/google-transit-layer-through-google-maps-api untuk layer traffic Anda dapat menggunakan url ini: mt1.google.com/vt/… ... Tapi, seperti dicatat oleh Alex McMillan, menggunakan peta google di dalam pustaka bukan google merupakan pelanggaran ketentuan layanan.
Alessandro Battistini
5

Tidak, tidak, dan mungkin tidak akan pernah mendukungnya, karena tidak ada akses ubin langsung dengan GMaps. Satu-satunya opsi yang saya ketahui masih berupa: https://github.com/mapgears/ol3-google-maps

bartvde
sumber
1
Saya tidak bisa mengerti, apa masalahnya di sini, Ömür Bilgili sudah memberikan kode contoh yang berfungsi dengan baik.
Atul Sureka
2
Ini bekerja tetapi ini merupakan pelanggaran terhadap persyaratan layanan mereka.
bartvde
3

Saya sudah memberikan jawaban di sini: https://stackoverflow.com/a/42616386/6068293 dapatkah Anda berkomentar jika itu yang Anda cari?

Membuat solusi untuk data peta biasa perlu menggabungkan pemahaman tentang data yang diunduh dengan permintaan tersebut: https://www.google.pl/maps/vt/stream/pb=!1m7!8m6!1m3!1i11!2i348 ! 3i816! 2i4! 3x65535! 2m3! 1E0! 2SM! 3i375060690! 2m38! 1e2! 2sspotlight! 4m2! 1sgid! 2sXMf6EbH1C4DOnd6foX0POg! 8m32! 1m2! 12m1! 20e1! 2M8! 1s0x80c2c75ddc27da13% 3A0xe22fdf6f254608f4! 2sLos + Angeles% 2C + Kalifornia% 2C + Stany + Zjednoczone! 4m2! 3d34.0522342! 4d-118.24368489999999! 5e1! 6b1! 9e0! 11e1! 13m10! 2shplexp% 2Ca! 15b1! 18b3! 5b0! 6b0! 6b0! 6b0! ! 19u11! 19u12! 19u14! 19u20! 20m1! 1e6! 3m8! 2spl! 3spl! 5e1105! 12m4! 1e68! 2m2! 1sset! 2sRoadmap! 4e1! 6m6! 1e12! 2i2! 28i3!

Pembuatan data di memori browser: /superuser/948738/what-is-the-blobhttp-prefix-and-where-can-i-learn-more-about-ini dan mengambil ubin dari data BLOB dimasukkan ke browser

Michał Okulewicz
sumber
Satu lagi pemikiran tentang masalah ini. Ubin tersedia di bawah alamat berikut: maps.google.com/maps/… yang telah digunakan oleh versi OpenLayers dan GoogleMaps API sebelumnya. Satu-satunya masalah adalah mencari tahu arti dari parameter pb ...
Michał Okulewicz
Saya masih belum tahu seluruh argumen pb, tetapi X, Y dan ZOOM dari ubin ditempatkan seperti yang ditandai di bawah ini:! 1m5! 1m4! 1i {ZOOM}! 2i {X}! 3i {Y}! 4i256! 2m3! 1e0! 2sm! 3i3175062737! 3m9! 2spl! 3sUS! 5e18! 12m1! 1e47! 12m3! 1e37! 2m1! 1ssmartmaps! 4e0
Michał Okulewicz
1
Saya ragu ini adalah pendekatan hukum
bartvde
3
Saya belum mengetahui, tetapi @bartvde benar: Tidak ada akses ke API atau Konten kecuali melalui Layanan
Michał Okulewicz
1

Ada cara untuk memasukkan peta google ke openlayers. Anda dapat menyalin kode saya. (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; } }

masukkan deskripsi gambar di sini

orang gila
sumber
-1

Openlayers telah berhenti mendukung peta Google dari versi 3 dan seterusnya. Cobalah menggunakan selebaran alih-alih Openlayers. Yang ringan dan memiliki sebagian besar fitur Openlayers. Jika ada yang hilang, Anda dapat dengan mudah menambahkannya sebagai plugin. Menambahkan Google Maps menggunakan ol.layer.Tile bertentangan dengan perjanjian lisensi Google.

George John
sumber