Bu dokümanda,
Maps JavaScript API. API, MapType
kullanır
bilgileri barındıracak bir nesne olarak tasarlanmıştır. MapType
harita döşemelerinin görüntülenmesini ve kullanımını tanımlayan bir
koordinat sistemlerinin ekran koordinatlarından dünyaya çevrilmesi
koordinatlarını (harita üzerinde) görebilirsiniz. Her MapType
bir
kartların ve özelliklerinin alınması ve serbest bırakılması için birkaç yöntem
reklam öğelerini inceleyin.
Maps JavaScript API'deki harita türlerinin iç işleyişi ileri düzey bir konudur. Çoğu geliştirici, aşağıda belirtilen temel harita türlerine tabidir. Bununla birlikte, sunumun sunumunu da değiştirebilirsiniz Stilli Haritalar'ı kullanan mevcut harita türlerini veya özel harita türlerini kullanarak kendi harita desenlerinizi tanımlayabilirsiniz. Özel harita türleri sağlarken, haritanın nasıl değiştirileceğini anlamanız gerekir. Harita Türü Kaydı.
Temel Harita Türleri
Maps JavaScript API'de dört tür harita bulunur. Bildiğiniz "boyalı boyama"ya ek olarak, yol haritası parçaları, Maps JavaScript API diğer harita türlerini de destekler.
Maps JavaScript API'de aşağıdaki harita türleri kullanılabilir:
roadmap
, varsayılan yol haritası görünümünü gösterir. Bu varsayılan harita türüdür.satellite
, Google Earth uydusunu görüntüler resim.hybrid
, normal ve uyduyu karışık olarak gösterir görüntüleme.terrain
, araziye dayalı fiziksel bir harita gösterir ekleyebilirsiniz.
Map
tarafından kullanılan harita türünü ayarlayarak
mapTypeId
özelliği (ayar aracılığıyla oluşturucu içinde)
veya haritanınMap options
setMapTypeId()
yöntemi. mapTypeID
mülkü
varsayılan olarak roadmap
değerine ayarlanır.
İnşaat sırasında mapTypeId
ayarlanıyor:
var myLatlng = new google.maps.LatLng(-34.397, 150.644); var mapOptions = { zoom: 8, center: myLatlng, mapTypeId: 'satellite' }; var map = new google.maps.Map(document.getElementById('map'), mapOptions);
mapTypeId
öğesini dinamik olarak değiştirme:
map.setMapTypeId('terrain');
Haritanın harita türünü doğrudan ayarlamadığınızı unutmayın.
bunun yerine mapTypeId
değerini
Bir tanımlayıcı kullanarak MapType
.
Maps JavaScript API bir harita türü kayıt defteri kullanır.
aşağıdaki adımları izleyin.
45° görüntüler
Maps JavaScript API, Google Haritalar'daki belirli konumlar. Bu yüksek çözünürlüklü görüntüler, ana yönlerin her birine doğru perspektif görünümleri (Kuzey, Güney, Doğu, Batı). Bu resimler, üst kısımda desteklenen harita türleri için yakınlaştırma düzeyleri.
Aşağıdaki resimde, New York'un 45° perspektif görünümü gösterilmektedir:
satellite
ve hybrid
harita türleri 45° değerini destekler
(mümkün olduğunda) yüksek yakınlaştırma seviyelerinde (12 ve üzeri) görüntüler. Kullanıcı
bulunduğu konumu yakınlaştırdığında, bu harita türleri
şu şekilde kendi görünümlerini otomatik olarak değiştirebilir:
- Uydu veya karma görüntüler, 45°'lik bir açıya sahip olan görüntülerle değiştirilir.
perspektifini kullanır. Bu tür görünümler varsayılan olarak
olmak üzere ikiye ayrılır. Kullanıcı uzaklaşırsa, varsayılan uydu veya
karma görüntüler tekrar görünür. Davranış, yakınlaştırma düzeyine bağlı olarak değişir
ve
tilt
değeri: - 12 ve 18 yakınlaştırma seviyeleri arasında yukarıdan aşağı temel harita (0°) değeri
tilt
değeri 45 olarak ayarlanmadıkça varsayılan olarak kullanılır. - 18 veya daha yüksek zum düzeylerinde 45° temel harita,
tilt
değeri 0 olarak ayarlandı. - Döndürme denetimi görünür hale gelir. Döndürme denetimi,
kullanıcının yatırmasını ve görünümü 90° döndürebilmesini sağlayan özellikler
artar. Döndürme kontrolünü gizlemek için,
rotateControl
-false
.
45° görüntülerin gösterildiği bir harita türünden uzaklaştırma yapıldığında geri dönüş orijinal harita türleri yeniden oluşturuluyor.
45° Görüntüleri Etkinleştirme ve Devre Dışı Bırakma
45° görüntüleri, setTilt(0)
Map
nesne algılandı. Desteklenen harita türlerinde 45° görüntüleri etkinleştirmek için
setTilt(45)
numaralı telefonu arayın. Map
adlı çocuğun getTilt()
cihazı
yöntemi her zaman sayfada gösterilen geçerli tilt
harita; haritada tilt
ayarlarsanız ve daha sonra bunu kaldırırsanız
tilt
(örneğin, haritayı uzaklaştırarak),
getTilt()
yöntemi 0
değerini döndürür.
Önemli: 45° görüntüler yalnızca kafes haritalar; bu görüntüler vektör haritalarıyla kullanılamaz.
Aşağıdaki örnekte New York şehrinin 45° görünümü gösterilmektedir:
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { center: { lat: 40.76, lng: -73.983 }, zoom: 15, mapTypeId: "satellite", } ); map.setTilt(45); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { center: { lat: 40.76, lng: -73.983 }, zoom: 15, mapTypeId: "satellite", }); map.setTilt(45); } window.initMap = initMap;
Örneği Deneyin
45° Görüntüleri Döndürme
45 derecelik görüntüler aslında bir dizi resimden oluşur.
her kardina yön için (Kuzey, Güney, Doğu, Batı). Haritanız
45° görüntüler gösteriyorsa, bu resmin konumunu
çağırarak buradaki kardinal yönlerinden birine
Map
nesnesinde setHeading()
, başarılı
Kuzeyden derece olarak ifade edilen bir sayı değeridir.
Aşağıdaki örnekte havadan harita ve otomatik döndürme gösterilmektedir her 3 saniyede bir harita gösterilir:
TypeScript
let map: google.maps.Map; function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { center: { lat: 40.76, lng: -73.983 }, zoom: 15, mapTypeId: "satellite", heading: 90, tilt: 45, }); // add listener to button document.getElementById("rotate")!.addEventListener("click", autoRotate); } function rotate90(): void { const heading = map.getHeading() || 0; map.setHeading(heading + 90); } function autoRotate(): void { // Determine if we're showing aerial imagery. if (map.getTilt() !== 0) { window.setInterval(rotate90, 3000); } } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
let map; function initMap() { map = new google.maps.Map(document.getElementById("map"), { center: { lat: 40.76, lng: -73.983 }, zoom: 15, mapTypeId: "satellite", heading: 90, tilt: 45, }); // add listener to button document.getElementById("rotate").addEventListener("click", autoRotate); } function rotate90() { const heading = map.getHeading() || 0; map.setHeading(heading + 90); } function autoRotate() { // Determine if we're showing aerial imagery. if (map.getTilt() !== 0) { window.setInterval(rotate90, 3000); } } window.initMap = initMap;
Örneği Deneyin
Harita Türü Kaydını Değiştirme
Bir haritanın mapTypeId
öğesi dize tanımlayıcısıdır
bir MapType
öğesini
değeri olabilir. Her Map
nesnesi,
Şu koleksiyonu içeren MapTypeRegistry
:
MapType
olarak kullanılabilir. Bu kayıt
mevcut harita türlerini seçmek için kullanılır.
eşlemenin diğer ucunda mevcut.
Doğrudan harita türü kaydından okuma yapmazsınız. Bunun yerine
özel eşleme türleri ekleyerek ve kayıt defterini ilişkilendirerek
seçtiğiniz dize tanımlayıcısını kullanabilirsiniz. Değişiklik yapamazsınız
veya temel harita türlerini değiştirin (yine de bunları şuradan kaldırabilirsiniz:
ilişkilendirilmiş harita bilgilerinin görünümünü değiştirerek
mapTypeControlOptions
) bilgileri gösterilir.
Aşağıdaki kod, haritayı yalnızca
haritanın mapTypeControlOptions
alanında iki harita türü
ve ilişkilendirmeyi eklemek için kayıt defterini değiştirir.
gerçek uygulamasına
MapType
arayüzü.
// Modify the control to only display two maptypes, the // default ROADMAP and the custom 'mymap'. // Note that because this is an association, we // don't need to modify the MapTypeRegistry beforehand. var MY_MAPTYPE_ID = 'mymaps'; var mapOptions = { zoom: 12, center: brooklyn, mapTypeControlOptions: { mapTypeIds: ['roadmap', MY_MAPTYPE_ID] }, mapTypeId: MY_MAPTYPE_ID }; // Create our map. This creation will implicitly create a // map type registry. map = new google.maps.Map(document.getElementById('map'), mapOptions); // Create your custom map type using your own code. // (See below.) var myMapType = new MyMapType(); // Set the registry to associate 'mymap' with the // custom map type we created, and set the map to // show that map type. map.mapTypes.set(MY_MAPTYPE_ID, myMapType);
Stilli Haritalar
StyledMapType
, dokümanın sunumunu özelleştirmenize olanak tanır.
bu öğelerin görsel görünümünü değiştirerek,
parklar ve yerleşim alanları olarak yeniden tasarlanmış şekilde
varsayılan harita türünde kullanılır.
StyledMapType
hakkında daha fazla bilgi edinmek için rehbere bakın:
stilli haritalar oluşturun.
Özel Harita Türleri
Maps JavaScript API, Google Haritalar'daki özel harita türlerini yönetmenizi ve yönetmenizi sağlar. Bu sayede, kendi harita görüntülerinizi veya karo yer paylaşımlarını kullanabilirsiniz.
Haritalar JavaScript API'si:
- Şu resimlerden oluşan standart döşeme grupları:
tam kartografik haritalar meydana getirmektir. Bu karo
gruplar, temel harita türleri olarak da bilinir. Bu harita türleri
mevcut varsayılan harita türleri gibi davranın ve davranın:
roadmap
,satellite
,hybrid
veterrain
. E-postanızda özel eşleme türünü eşlemek için bir HaritanınmapTypes
dizisine Maps JavaScript API'deki kullanıcı arayüzünün özel harita türünüzü standart bir harita türü olarak değerlendirin (HaritaType'a ekleyerek kontrol edebilir. - Şunların üzerinde görüntülenen resim karosu yer paylaşımları mevcut temel harita türleri. Genellikle bu harita türleri mevcut bir harita türünü genişletmek için kullanılır. ve genellikle belirli yerlerle sınırlanırlar ve/veya yakınlaştırma seviyeleri çıkarılabilir. Bu blokların şeffaf olabileceğini unutmayın. mevcut haritalara özellik eklemenize olanak tanır.
- Değişiklik yapmanıza olanak tanıyan resim olmayan harita türleri en temel düzeyde görüntülemek.
Bu seçeneklerin her biri, kullandığınız sınıfa dayalı
MapType
kullanır. Ayrıca,
ImageMapType
sınıfı, yerleşik bazı özellikleri
basitleştiren gelişmiş bir çalışma ortamıdır.
MapType
Arayüzü
MapType
uygulayan sınıflar oluşturmadan önce
Google Haritalar'ın bütçenizi nasıl belirleyeceğini
koordinatlarını verir ve haritanın hangi bölümlerinin gösterileceğine karar verir. Şunları yapmanız gerekir:
tüm temel veya yer paylaşımlı harita türleri için benzer bir mantık uygulayabilirsiniz.
Harita oluşturma rehberini okuyun
karo koordinatlarıyla birlikte çalışır.
Özel harita türleri MapType
özelliğini uygulamalıdır
kullanır. Bu arayüzde belirli özellikleri ve
API'nin haritanıza istek başlatmasını sağlayan yöntemler
API, haritayı göstermesi gerektiğini belirlediğinde türler
mevcut görüntü alanı ve yakınlaştırma düzeyinde karolara yerleştirilmelidir. Sizin kolunuz
hangi karonun yükleneceğine karar verir.
Not:
kendi sınıfını kullanabilir. Alternatif olarak
uyumlu görüntüler oluşturmak için
Şu anda uygulayan ImageMapType
sınıfı
bu arayüzü kullanın.
MapType
arayüzünü uygulayan sınıflar
aşağıdaki özellikleri tanımlamanızı ve doldurmanızı gerektirir:
tileSize
(zorunlu), karonun boyutunu belirtir (google.maps.Size
türünde). Boyutlar dikdörtgen olmalıdır ancak kare olmaları gerekmez.maxZoom
(gerekli), maksimum yakınlaştırmayı belirtir bu harita türündeki parçaların görüntüleneceği düzey.minZoom
(isteğe bağlı), minimum yakınlaştırmayı belirtir bu harita türündeki parçanın görüntüleneceği düzey. Varsayılan olarak bu değer, minimum değer olmadığını gösteren0
yakınlaştırma düzeyi var.name
(isteğe bağlı) bu haritanın adını belirtir türü. Bu özellik yalnızca bu harita türünü istiyorsanız gereklidir bir MapType kontrolü içinde seçilebilir hale gelecektir. (Bkz. AşağıdakiMapType
Denetimleri ekleniyor.)alt
(isteğe bağlı) bunun için alternatif metni belirtir harita türü, fareyle üzerine gelindiğinde gösterilen metin olarak gösterilir. Bu özellik yalnızca gereklidir Bu harita türünün bir MapType kontrolü içinde seçilebilir olmasını istiyorsanız. (Bkz.MapType
Denetim Ekleme below.)
Ayrıca, MapType
arayüzünü kullanan sınıflar
aşağıdaki yöntemleri uygulamanız gerekir:
-
API her zaman
getTile()
(zorunlu) çağrılır haritanın verilen öğe için yeni karolar görüntülemesi görünüm.getTile()
yöntemi aşağıdakileri içermelidir: imza:getTile(tileCoord:Point,zoom:number,ownerDocument:Document):Node
API,
getTile()
öğesini çağırması gerekip gerekmediğini belirlerMapType
tileSize
,minZoom
vemaxZoom
mevcut görünümü ve yakınlaştırma düzeyini seçebilirsiniz. İşleyici geçilen bir koordinat verildiğinde bir HTML öğesi döndürmelidir. yakınlaştırma düzeyini ve karo resminin ekleneceği DOM öğesini seçin. -
API her zaman
releaseTile()
(isteğe bağlı) çağrılır: haritadan çıkan bir karoyu kaldırması gerektiğini belirler. Bu yöntem aşağıdaki imzaya sahip olmalıdır:releaseTile(tile:Node)
Normalde, kaldırma işlemini ekli öğeleri olan, . Örneğin, harita öğesine etkinlik işleyiciler eklediyseniz yer paylaşımlı reklamları buradan kaldırmalısınız.
getTile()
yöntemi, aşağıdakiler için ana denetleyici işlevi görür:
belirli bir görüntü alanında hangi blokların yükleneceğini belirleme.
Temel Harita Türleri
Bu şekilde oluşturduğunuz harita türleri
ya da yer paylaşımı olarak diğer harita türleriyle birleştirilemez. Bağımsız
harita türleri temel harita türleri olarak bilinir. API'den yararlanmak isteyebilirsiniz.
bu tür özel MapType
'leri mevcut diğer herhangi bir öğe gibi kullan
temel harita türü (ROADMAP
, TERRAIN
vb.). Yapılacaklar
Bu nedenle, özel MapType
öğenizi Map
mapTypes
mülkü. Bu özellik bir türde
MapTypeRegistry
Aşağıdaki kod, gösterilecek temel bir MapType
oluşturur
bir haritanın karo koordinatlarının koordinatlarını alır ve karoların ana hatlarını çizer:
TypeScript
/* * This demo demonstrates how to replace default map tiles with custom imagery. * In this case, the CoordMapType displays gray tiles annotated with the tile * coordinates. * * Try panning and zooming the map to see how the coordinates change. */ class CoordMapType { tileSize: google.maps.Size; maxZoom = 19; name = "Tile #s"; alt = "Tile Coordinate Map Type"; constructor(tileSize: google.maps.Size) { this.tileSize = tileSize; } getTile( coord: google.maps.Point, zoom: number, ownerDocument: Document ): HTMLElement { const div = ownerDocument.createElement("div"); div.innerHTML = String(coord); div.style.width = this.tileSize.width + "px"; div.style.height = this.tileSize.height + "px"; div.style.fontSize = "10"; div.style.borderStyle = "solid"; div.style.borderWidth = "1px"; div.style.borderColor = "#AAAAAA"; div.style.backgroundColor = "#E5E3DF"; return div; } releaseTile(tile: HTMLElement): void {} } function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 10, center: { lat: 41.85, lng: -87.65 }, streetViewControl: false, mapTypeId: "coordinate", mapTypeControlOptions: { mapTypeIds: ["coordinate", "roadmap"], style: google.maps.MapTypeControlStyle.DROPDOWN_MENU, }, } ); map.addListener("maptypeid_changed", () => { const showStreetViewControl = (map.getMapTypeId() as string) !== "coordinate"; map.setOptions({ streetViewControl: showStreetViewControl, }); }); // Now attach the coordinate map type to the map's registry. map.mapTypes.set( "coordinate", new CoordMapType(new google.maps.Size(256, 256)) ); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
/* * This demo demonstrates how to replace default map tiles with custom imagery. * In this case, the CoordMapType displays gray tiles annotated with the tile * coordinates. * * Try panning and zooming the map to see how the coordinates change. */ class CoordMapType { tileSize; maxZoom = 19; name = "Tile #s"; alt = "Tile Coordinate Map Type"; constructor(tileSize) { this.tileSize = tileSize; } getTile(coord, zoom, ownerDocument) { const div = ownerDocument.createElement("div"); div.innerHTML = String(coord); div.style.width = this.tileSize.width + "px"; div.style.height = this.tileSize.height + "px"; div.style.fontSize = "10"; div.style.borderStyle = "solid"; div.style.borderWidth = "1px"; div.style.borderColor = "#AAAAAA"; div.style.backgroundColor = "#E5E3DF"; return div; } releaseTile(tile) {} } function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 10, center: { lat: 41.85, lng: -87.65 }, streetViewControl: false, mapTypeId: "coordinate", mapTypeControlOptions: { mapTypeIds: ["coordinate", "roadmap"], style: google.maps.MapTypeControlStyle.DROPDOWN_MENU, }, }); map.addListener("maptypeid_changed", () => { const showStreetViewControl = map.getMapTypeId() !== "coordinate"; map.setOptions({ streetViewControl: showStreetViewControl, }); }); // Now attach the coordinate map type to the map's registry. map.mapTypes.set( "coordinate", new CoordMapType(new google.maps.Size(256, 256)), ); } window.initMap = initMap;
Örneği Deneyin
Bindirme Harita Türleri
Bazı harita türleri, mevcut haritanın üzerinde çalışmak üzere tasarlanmıştır bulunur. Bu tür harita türleri, haritadaki kullanıcılara ek veriler gösterebilirsiniz.
Böyle durumlarda, harita türünün ayrı bir öğe yerine bir yer paylaşımı olarak ele alınmasını istersiniz.
Bunu, harita türünü mevcut bir MapType
öğesine doğrudan ekleyerek yapabilirsiniz:
Map
overlayMapTypes
özelliği. Bu mülk
MapType
sn. MVCArray
. Tüm harita türleri
(ana ve yer paylaşımlı) otomatik olarak oluşturulan
mapPane
katmanıdır. Yer paylaşımlı harita türleri, görüntüledikleri temel haritanın üstünde
ve ek kaynaklar,
Map.overlayMapTypes
dizisi (daha yüksek endeksli yer paylaşımları
değerleri, daha düşük dizin değerlerine sahip yer paylaşımlarının önünde görüntülenir).
Aşağıdaki örnek, öncekiyle aynı
dışında bir karo yer paylaşımı oluşturduk MapType
ROADMAP
harita türünün üzerine:
TypeScript
/* * This demo illustrates the coordinate system used to display map tiles in the * API. * * Tiles in Google Maps are numbered from the same origin as that for * pixels. For Google's implementation of the Mercator projection, the origin * tile is always at the northwest corner of the map, with x values increasing * from west to east and y values increasing from north to south. * * Try panning and zooming the map to see how the coordinates change. */ class CoordMapType implements google.maps.MapType { tileSize: google.maps.Size; alt: string|null = null; maxZoom: number = 17; minZoom: number = 0; name: string|null = null; projection: google.maps.Projection|null = null; radius: number = 6378137; constructor(tileSize: google.maps.Size) { this.tileSize = tileSize; } getTile( coord: google.maps.Point, zoom: number, ownerDocument: Document ): HTMLElement { const div = ownerDocument.createElement("div"); div.innerHTML = String(coord); div.style.width = this.tileSize.width + "px"; div.style.height = this.tileSize.height + "px"; div.style.fontSize = "10"; div.style.borderStyle = "solid"; div.style.borderWidth = "1px"; div.style.borderColor = "#AAAAAA"; return div; } releaseTile(tile: Element): void {} } function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 10, center: { lat: 41.85, lng: -87.65 }, } ); // Insert this overlay map type as the first overlay map type at // position 0. Note that all overlay map types appear on top of // their parent base map. const coordMapType = new CoordMapType(new google.maps.Size(256, 256)) map.overlayMapTypes.insertAt( 0, coordMapType ); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
/* * This demo illustrates the coordinate system used to display map tiles in the * API. * * Tiles in Google Maps are numbered from the same origin as that for * pixels. For Google's implementation of the Mercator projection, the origin * tile is always at the northwest corner of the map, with x values increasing * from west to east and y values increasing from north to south. * * Try panning and zooming the map to see how the coordinates change. */ class CoordMapType { tileSize; alt = null; maxZoom = 17; minZoom = 0; name = null; projection = null; radius = 6378137; constructor(tileSize) { this.tileSize = tileSize; } getTile(coord, zoom, ownerDocument) { const div = ownerDocument.createElement("div"); div.innerHTML = String(coord); div.style.width = this.tileSize.width + "px"; div.style.height = this.tileSize.height + "px"; div.style.fontSize = "10"; div.style.borderStyle = "solid"; div.style.borderWidth = "1px"; div.style.borderColor = "#AAAAAA"; return div; } releaseTile(tile) {} } function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 10, center: { lat: 41.85, lng: -87.65 }, }); // Insert this overlay map type as the first overlay map type at // position 0. Note that all overlay map types appear on top of // their parent base map. const coordMapType = new CoordMapType(new google.maps.Size(256, 256)); map.overlayMapTypes.insertAt(0, coordMapType); } window.initMap = initMap;
Örneği Deneyin
Resim Haritası Türleri
Temel harita işlevi görmesi için MapType
uygulama
zaman alıcı ve zahmetli bir iş olabilir. API
MapType
öğesini uygulayan özel bir sınıf sağlar
arayüzü: En yaygın harita türlerinden oluşan harita türleri
tek resimli dosyalardan oluşan karolar.
Bu sınıf, ImageMapType
sınıfı,
bir ImageMapTypeOptions
kullanılarak oluşturulur
aşağıdakileri tanımlayan nesne spesifikasyonu
özellikler:
tileSize
(zorunlu), karonun boyutunu belirtir (google.maps.Size
türünde). Boyutlar dikdörtgen olmalıdır ancak kare olmaları gerekmez.getTileUrl
(zorunlu), işlevi belirtir, satır içi işlev değeri olarak sağlanır; seçilen modele göre uygun resim karosu seçimi dünya koordinatlarını ve yakınlaştırma düzeyini etkiler.
Aşağıdaki kod temel bir ImageMapType
uygular
Google'ın ay karolarını kullanarak. Örnekte bir normalleştirmeden yararlanılıyor
karoların x ekseni boyunca tekrarlanmasını ancak bu eksen boyunca tekrarlanmasını sağlama
y eksenini seçin.
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { center: { lat: 0, lng: 0 }, zoom: 1, streetViewControl: false, mapTypeControlOptions: { mapTypeIds: ["moon"], }, } ); const moonMapType = new google.maps.ImageMapType({ getTileUrl: function (coord, zoom): string { const normalizedCoord = getNormalizedCoord(coord, zoom); if (!normalizedCoord) { return ""; } const bound = Math.pow(2, zoom); return ( "https://mw1.google.com/mw-planetary/lunar/lunarmaps_v1/clem_bw" + "/" + zoom + "/" + normalizedCoord.x + "/" + (bound - normalizedCoord.y - 1) + ".jpg" ); }, tileSize: new google.maps.Size(256, 256), maxZoom: 9, minZoom: 0, // @ts-ignore TODO 'radius' does not exist in type 'ImageMapTypeOptions' radius: 1738000, name: "Moon", }); map.mapTypes.set("moon", moonMapType); map.setMapTypeId("moon"); } // Normalizes the coords that tiles repeat across the x axis (horizontally) // like the standard Google map tiles. function getNormalizedCoord(coord, zoom) { const y = coord.y; let x = coord.x; // tile range in one direction range is dependent on zoom level // 0 = 1 tile, 1 = 2 tiles, 2 = 4 tiles, 3 = 8 tiles, etc const tileRange = 1 << zoom; // don't repeat across y-axis (vertically) if (y < 0 || y >= tileRange) { return null; } // repeat across x-axis if (x < 0 || x >= tileRange) { x = ((x % tileRange) + tileRange) % tileRange; } return { x: x, y: y }; } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { center: { lat: 0, lng: 0 }, zoom: 1, streetViewControl: false, mapTypeControlOptions: { mapTypeIds: ["moon"], }, }); const moonMapType = new google.maps.ImageMapType({ getTileUrl: function (coord, zoom) { const normalizedCoord = getNormalizedCoord(coord, zoom); if (!normalizedCoord) { return ""; } const bound = Math.pow(2, zoom); return ( "https://mw1.google.com/mw-planetary/lunar/lunarmaps_v1/clem_bw" + "/" + zoom + "/" + normalizedCoord.x + "/" + (bound - normalizedCoord.y - 1) + ".jpg" ); }, tileSize: new google.maps.Size(256, 256), maxZoom: 9, minZoom: 0, // @ts-ignore TODO 'radius' does not exist in type 'ImageMapTypeOptions' radius: 1738000, name: "Moon", }); map.mapTypes.set("moon", moonMapType); map.setMapTypeId("moon"); } // Normalizes the coords that tiles repeat across the x axis (horizontally) // like the standard Google map tiles. function getNormalizedCoord(coord, zoom) { const y = coord.y; let x = coord.x; // tile range in one direction range is dependent on zoom level // 0 = 1 tile, 1 = 2 tiles, 2 = 4 tiles, 3 = 8 tiles, etc const tileRange = 1 << zoom; // don't repeat across y-axis (vertically) if (y < 0 || y >= tileRange) { return null; } // repeat across x-axis if (x < 0 || x >= tileRange) { x = ((x % tileRange) + tileRange) % tileRange; } return { x: x, y: y }; } window.initMap = initMap;
Örneği Deneyin
Tahminler
Dünya üç boyutlu bir küre (yaklaşık olarak). harita, iki boyutlu düz bir yüzeydir. İçinde gördüğünüz harita Maps JavaScript API, Dünya'nın herhangi bir düz haritası gibi, projeksiyonunu oluşturun. En basit haliyle Bu, projeksiyon bir projedeki ilerleme, enlem/boylam değerlerini projeksiyon haritasındaki koordinatlara dönüştürün.
Maps JavaScript API'deki projeksiyonlar,
Projection
arayüzü. Projection
yalnızca tek bir koordinat sisteminde
ancak çift yönlü bir harita oluşturma. Diğer bir deyişle,
Earth koordinatlarından (LatLng
nesne) nasıl çeviri yapılacağını tanımla
Projection
sınıfına
dünya
koordinat sistemini ve bunun tersini yapabilirsiniz. Google Haritalar
Mercator projeksiyonunu kullanarak haritalarını oluşturabilir
ve haritadaki etkinlikleri aşağıdaki etkinliklere dönüştürerek
coğrafi koordinatlar. Bu projeksiyonu şu şekilde edinebilirsiniz:
Map
numaralı telefondan getProjection()
aranıyor
(veya standart temel MapType
türlerinden herhangi biri.) Çoğu kullanım için
bu standart Projection
yeterli olacaktır, ancak
kendi özel projeksiyonlarınızı tanımlayıp
kullanabilirsiniz.
Projeksiyon Uygulama
Özel bir projeksiyon uygularken proje yönetimini birkaç nokta:
- Enlem ve boylam koordinatlarının
Kartezyen düzlem (veya tersi). (
Projection
arayüzü yalnızca doğrusal koordinatlara dönüşümleri destekler.) - Taban karo boyutu. Tüm karolar dikdörtgen olmalıdır.
- "Dünyanın boyutu" yakınlaştırma seviyesi 0'a ayarlanmış ana karoyu kullanarak bir haritanın görüntüsünü seçin. Yakınlaştırma seviyesi 0 olan tek parçadan oluşan haritalar için dünya boyutunun ve taban karo boyutu aynı.
Şurada dönüşümleri koordine edin: Projeksiyonlar
Her projeksiyon, bu ikisi arasında geçiş yapan iki yöntem sunar. koordinasyon sistemleri; coğrafi ve ticari bölgeler arasında dünya koordinatları:
Projection.fromLatLngToPoint()
yöntemi, aşağıdaki gibi bir dönüşüm sağlar:LatLng
değerini dünya koordinatına dönüştürdü. Bu yöntem kullanılır harita üzerinde yer paylaşımlarını konumlandırmak (ve haritanın kendisini konumlandırmak) için kullanılır.Projection.fromPointToLatLng()
yöntemi dönüşüm gerçekleştirir dünya koordinatınıLatLng
değerine dönüştürür. Bu yöntemi, web sitesinde gerçekleşen tıklamalar gibi etkinlikleri coğrafi koordinatlar sağlar.
Google Haritalar projeksiyonların doğrusal olduğunu varsayar.
Projeksiyonu genellikle iki durum için kullanabilirsiniz: dünya haritası oluşturabilir veya yerel bir bölgenin haritasını oluşturabilirsiniz. Önceki senaryoda projeksiyonunuzun da doğrusal ve normal olduğundan emin olmalısınız. görebilirsiniz. Bazı projeksiyonlar (özellikle konik projeksiyonlar) "yerel olarak normal" olabilir (yani, kuzeyi işaret eder) ama gerçek kuzeyden sapmalıdır; bir konuma göre ne kadar ileri doğru konumlandırılıyorsa, referans boylama geçer. Böyle bir projeksiyonu yerel olarak kullanabilirsiniz, projeksiyonun her zaman tam olmayabileceğinin ve dönüşüm hatalardan gittikçe uzaklaştıkça referans boylamı değiştirmelidir.
Projeksiyonlarda Harita Parçası Seçimi
Projeksiyonlar sadece işlerin konumlarını belirlemek için değil
ancak harita döşemelerinin kendisini konumlandırmak için kullanılabilir.
Maps JavaScript API, temel haritaları MapType
kullanarak oluşturur
için hem projection
özelliği hem de
haritanın projeksiyonunu ve bir getTile()
değerini tanımlayarak
temel alınan harita parçaları alma yöntemi
kutu
koordinat değerleridir. Parça koordinatları
hem temel karo boyutunuz (dikdörtgen olmalıdır) hem de "dünya"
boyut" dünyanızın piksel boyutu olan haritanızın boyutu
yakınlaştırma seviyesinde 0'a ayarlanır. (Yakınlaştırma düzeyi 0 olan tek bir bloktan oluşan haritalar için, karo
boyut ve dünya boyutu aynı olmalıdır.)
Temel karo boyutunu MapType
içinde tanımlarsınız
tileSize
mülkü. Dünyanın boyutunu dolaylı olarak tanımlarsınız
projeksiyonunuzun fromLatLngToPoint()
dahilinde
ve fromPointToLatLng()
yöntem.
Resim seçimi bu aktarılan değerlere bağlı olduğundan
programatik olarak seçilebilecek görüntüleri adlandırmak için
gibi aktarılan değerler
map_zoom_tileX_tileY.png
Aşağıdaki örnekte bir ImageMapType
her bir arama terimi için
Gall-Peters projeksiyonu:
TypeScript
// This example defines an image map type using the Gall-Peters // projection. // https://en.wikipedia.org/wiki/Gall%E2%80%93Peters_projection function initMap(): void { // Create a map. Use the Gall-Peters map type. const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 0, center: { lat: 0, lng: 0 }, mapTypeControl: false, } ); initGallPeters(); map.mapTypes.set("gallPeters", gallPetersMapType); map.setMapTypeId("gallPeters"); // Show the lat and lng under the mouse cursor. const coordsDiv = document.getElementById("coords") as HTMLElement; map.controls[google.maps.ControlPosition.TOP_CENTER].push(coordsDiv); map.addListener("mousemove", (event: google.maps.MapMouseEvent) => { coordsDiv.textContent = "lat: " + Math.round(event.latLng!.lat()) + ", " + "lng: " + Math.round(event.latLng!.lng()); }); // Add some markers to the map. map.data.setStyle((feature) => { return { title: feature.getProperty("name") as string, optimized: false, }; }); map.data.addGeoJson(cities); } let gallPetersMapType; function initGallPeters() { const GALL_PETERS_RANGE_X = 800; const GALL_PETERS_RANGE_Y = 512; // Fetch Gall-Peters tiles stored locally on our server. gallPetersMapType = new google.maps.ImageMapType({ getTileUrl: function (coord, zoom) { const scale = 1 << zoom; // Wrap tiles horizontally. const x = ((coord.x % scale) + scale) % scale; // Don't wrap tiles vertically. const y = coord.y; if (y < 0 || y >= scale) return ""; return ( "https://developers.google.com/maps/documentation/" + "javascript/examples/full/images/gall-peters_" + zoom + "_" + x + "_" + y + ".png" ); }, tileSize: new google.maps.Size(GALL_PETERS_RANGE_X, GALL_PETERS_RANGE_Y), minZoom: 0, maxZoom: 1, name: "Gall-Peters", }); // Describe the Gall-Peters projection used by these tiles. gallPetersMapType.projection = { fromLatLngToPoint: function (latLng) { const latRadians = (latLng.lat() * Math.PI) / 180; return new google.maps.Point( GALL_PETERS_RANGE_X * (0.5 + latLng.lng() / 360), GALL_PETERS_RANGE_Y * (0.5 - 0.5 * Math.sin(latRadians)) ); }, fromPointToLatLng: function (point, noWrap) { const x = point.x / GALL_PETERS_RANGE_X; const y = Math.max(0, Math.min(1, point.y / GALL_PETERS_RANGE_Y)); return new google.maps.LatLng( (Math.asin(1 - 2 * y) * 180) / Math.PI, -180 + 360 * x, noWrap ); }, }; } // GeoJSON, describing the locations and names of some cities. const cities = { type: "FeatureCollection", features: [ { type: "Feature", geometry: { type: "Point", coordinates: [-87.65, 41.85] }, properties: { name: "Chicago" }, }, { type: "Feature", geometry: { type: "Point", coordinates: [-149.9, 61.218] }, properties: { name: "Anchorage" }, }, { type: "Feature", geometry: { type: "Point", coordinates: [-99.127, 19.427] }, properties: { name: "Mexico City" }, }, { type: "Feature", geometry: { type: "Point", coordinates: [-0.126, 51.5] }, properties: { name: "London" }, }, { type: "Feature", geometry: { type: "Point", coordinates: [28.045, -26.201] }, properties: { name: "Johannesburg" }, }, { type: "Feature", geometry: { type: "Point", coordinates: [15.322, -4.325] }, properties: { name: "Kinshasa" }, }, { type: "Feature", geometry: { type: "Point", coordinates: [151.207, -33.867] }, properties: { name: "Sydney" }, }, { type: "Feature", geometry: { type: "Point", coordinates: [0, 0] }, properties: { name: "0°N 0°E" }, }, ], }; declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example defines an image map type using the Gall-Peters // projection. // https://en.wikipedia.org/wiki/Gall%E2%80%93Peters_projection function initMap() { // Create a map. Use the Gall-Peters map type. const map = new google.maps.Map(document.getElementById("map"), { zoom: 0, center: { lat: 0, lng: 0 }, mapTypeControl: false, }); initGallPeters(); map.mapTypes.set("gallPeters", gallPetersMapType); map.setMapTypeId("gallPeters"); // Show the lat and lng under the mouse cursor. const coordsDiv = document.getElementById("coords"); map.controls[google.maps.ControlPosition.TOP_CENTER].push(coordsDiv); map.addListener("mousemove", (event) => { coordsDiv.textContent = "lat: " + Math.round(event.latLng.lat()) + ", " + "lng: " + Math.round(event.latLng.lng()); }); // Add some markers to the map. map.data.setStyle((feature) => { return { title: feature.getProperty("name"), optimized: false, }; }); map.data.addGeoJson(cities); } let gallPetersMapType; function initGallPeters() { const GALL_PETERS_RANGE_X = 800; const GALL_PETERS_RANGE_Y = 512; // Fetch Gall-Peters tiles stored locally on our server. gallPetersMapType = new google.maps.ImageMapType({ getTileUrl: function (coord, zoom) { const scale = 1 << zoom; // Wrap tiles horizontally. const x = ((coord.x % scale) + scale) % scale; // Don't wrap tiles vertically. const y = coord.y; if (y < 0 || y >= scale) return ""; return ( "https://developers.google.com/maps/documentation/" + "javascript/examples/full/images/gall-peters_" + zoom + "_" + x + "_" + y + ".png" ); }, tileSize: new google.maps.Size(GALL_PETERS_RANGE_X, GALL_PETERS_RANGE_Y), minZoom: 0, maxZoom: 1, name: "Gall-Peters", }); // Describe the Gall-Peters projection used by these tiles. gallPetersMapType.projection = { fromLatLngToPoint: function (latLng) { const latRadians = (latLng.lat() * Math.PI) / 180; return new google.maps.Point( GALL_PETERS_RANGE_X * (0.5 + latLng.lng() / 360), GALL_PETERS_RANGE_Y * (0.5 - 0.5 * Math.sin(latRadians)), ); }, fromPointToLatLng: function (point, noWrap) { const x = point.x / GALL_PETERS_RANGE_X; const y = Math.max(0, Math.min(1, point.y / GALL_PETERS_RANGE_Y)); return new google.maps.LatLng( (Math.asin(1 - 2 * y) * 180) / Math.PI, -180 + 360 * x, noWrap, ); }, }; } // GeoJSON, describing the locations and names of some cities. const cities = { type: "FeatureCollection", features: [ { type: "Feature", geometry: { type: "Point", coordinates: [-87.65, 41.85] }, properties: { name: "Chicago" }, }, { type: "Feature", geometry: { type: "Point", coordinates: [-149.9, 61.218] }, properties: { name: "Anchorage" }, }, { type: "Feature", geometry: { type: "Point", coordinates: [-99.127, 19.427] }, properties: { name: "Mexico City" }, }, { type: "Feature", geometry: { type: "Point", coordinates: [-0.126, 51.5] }, properties: { name: "London" }, }, { type: "Feature", geometry: { type: "Point", coordinates: [28.045, -26.201] }, properties: { name: "Johannesburg" }, }, { type: "Feature", geometry: { type: "Point", coordinates: [15.322, -4.325] }, properties: { name: "Kinshasa" }, }, { type: "Feature", geometry: { type: "Point", coordinates: [151.207, -33.867] }, properties: { name: "Sydney" }, }, { type: "Feature", geometry: { type: "Point", coordinates: [0, 0] }, properties: { name: "0°N 0°E" }, }, ], }; window.initMap = initMap;