Openlayers v4.0.1 hỗ trợ API Javascript của Google Maps?


10

Tôi muốn biết liệu phiên bản mới nhất của Openlayers (v4.0.1) có hỗ trợ Google Maps dưới dạng Lớp Ngói không. Tôi không thể tìm thấy bất kỳ ion tài liệu về điều này. Nếu Openlayers không hỗ trợ Google Maps, ai đó có thể cho tôi biết nếu có cách nào để làm điều này không?

Câu trả lời:


23

Tôi có thể sử dụng Google Maps trong OpenLayers 4.2 như thế này trong lớp WMS của tôi và nó được trang bị hoàn hảo với phép chiếu 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}' })})

Tại sao bạn cần một plugin?

Liên kết JSFiddle

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

Nếu bạn gặp phải vấn đề được trang bị với phép chiếu EPSG: 3857 khi bạn sử dụng Geoserver hoặc các nguồn vectơ khác; sử dụng như thế này

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

Tuyệt vời! Sau khi googling toàn bộ nửa đầu của ngày, đây là giải pháp tốt nhất giúp tôi tiết kiệm rất nhiều công việc! :)
AME

1
Điều này hiển thị chế độ xem vệ tinh, làm cách nào tôi có thể hiển thị chế độ xem mặc định tải trên bản đồ google?
BiJ

@BiJ xem mặc định? lộ trình hay lai? Tôi đã thêm lộ trình xem gạch xác định câu trả lời này.
Ömür Bilgili

Xin chào, nó không hoạt động nữa (404) bạn có cách giải quyết không?
Alexandre Mélard

1
Xin chào @ AlexandreMélard Tôi đã cập nhật mẫu mã này và nó hoạt động hoàn hảo, jsfiddle.net/omurbilgili/eyytw0gc/569
Ömür Bilgili

7

Chúng tôi có thể truy cập vào ol.source.Tile để truy cập vào mọi bản đồ google. Đối với mọi người cần nó, đây là mã cơ bản để tạo mọi lớp bản đồ google có sẵn để thêm vào bản đồ được phát triển trong 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}' }),
});

3
Hãy cẩn thận nếu bạn có kế hoạch sử dụng này; đó là vi phạm trực tiếp các điều khoản dịch vụ của Google Maps và bạn có thể sẽ gặp rắc rối.
Alex McMillan

Điều gì về lớp giao thông
Saroj

Theo trang này blinktag.com/google-transit-layer-through-google-maps-api cho lớp giao thông bạn có thể sử dụng url này: mt1.google.com/vt/... ... Nhưng, như đã nói bởi Alex McMillan, sử dụng google maps bên trong thư viện không phải google là vi phạm điều khoản dịch vụ.
Alessandro Battistini

5

Không, nó không có, và có lẽ nó sẽ không bao giờ hỗ trợ nó, vì không có quyền truy cập gạch trực tiếp với GMaps. Tùy chọn duy nhất mà tôi biết vẫn là một cái gì đó như: https://github.com/mapgears/ol3-google-maps


1
Tôi không thể hiểu, vấn đề ở đây là gì, Ömür Bilgili đã đưa ra mã mẫu hoạt động tốt.
Atul Sureka

2
Nó hoạt động nhưng nó vi phạm các điều khoản dịch vụ của họ.
bartvde

3

Tôi đã đưa ra câu trả lời ở đây: https://stackoverflow.com/a/42616386/6068293 bạn có thể vui lòng nhận xét nếu đó là những gì bạn đang tìm kiếm?

Tạo một giải pháp cho dữ liệu bản đồ đơn giản sẽ cần kết hợp sự hiểu biết về dữ liệu được tải xuống bởi các yêu cầu như vậy: https://www.google.pl/maps/vt/stream/pb=!1m7!8m6!1m3!1i11!2i348 ! 3i816! 2i4! 3x65535! 2m3! 1e0! 2sm3 + Stany + Zjednoczone! 4m2! 3d34.0522342! 4d-118.24368489999999! 5e1! 6b1! 9e0! 11e1! 13m10! 2bplexp% 2Ca! 15b1! 8m! ! 19u11! 19u12! 19u14! 19u20! 20m1! 1e6! 3m8! 2spl! 3spl! 5e1105! 12m4! 1e68! 2m2! 1sset! 2sRoadmap! 4e1! 6m6! 1e12!

Việc tạo dữ liệu trong bộ nhớ của trình duyệt: /superuser/948738/what-is-the-blobhttp-prefix-and-where-can-i-learn-more-about-this và truy xuất gạch từ dữ liệu BLOB đưa vào trình duyệt


Thêm một suy nghĩ về chủ đề này. Các ô có sẵn theo một địa chỉ sau: maps.google.com.vn/maps/ , đã được sử dụng bởi phiên bản trước của OpenLayers và GoogleMaps API. Vấn đề duy nhất là tìm ra ý nghĩa của tham số pb ...
Michał Okulewicz 11/03/2017

Tôi vẫn không biết toàn bộ đối số pb, nhưng X, Y và ZOOM của ô được đặt như được đánh dấu bên dưới :! 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
Tôi nghi ngờ đây là một cách tiếp cận hợp pháp
bartvde


1

Có một cách để bao gồm google maps cho openlayers. Bạn có thể sao chép mã của tôi. (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; } }

nhập mô tả hình ảnh ở đây


-1

Openlayers đã ngừng hỗ trợ bản đồ Google từ phiên bản 3 trở đi. Cố gắng sử dụng tờ rơi thay vì Openlayers. Đó là trọng lượng nhẹ và có hầu hết các tính năng của Openlayers. Nếu thiếu bất cứ thứ gì, bạn có thể dễ dàng thêm nó dưới dạng plugin. Sử dụng Google Maps bằng ol.layer.Tile là trái với thỏa thuận cấp phép của Google.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.