Open Layers'a Giriş
Bir web sayfasına basit bir haritanın nasıl yerleştirileceğini öğrenin.
Modern JavaScript, modülleri kullanırken ve yazarken en iyi şekilde çalışır. OpenLayers'ı kullanmanın önerilen yolu ol
paketi kurmaktır . Bu eğitim, her şeyin çalışması için node gerektiren basit bir geliştirme ortamı kurmanızda size yol gösterir.
ol
paket
OpenLayers'ı kullanmanın önerilen yolu ol
paketle çalışmaktır . En son sürümü şu şekilde yükleyebilirsiniz npm
:
Geliştirme için barındırılan derlemeler
OpenLayers'ı hiçbir şey indirmeden denemek istiyorsanız ( üretim için önerilmez ), html sayfanızın başına şunları ekleyin:
V6.5.0 sürümü için indirme
Arşiv | Açıklama |
---|---|
v6.5.0-dist.zip | Kitaplığın tam derlemesini ( ol.js ), bir kaynak eşlemesini ( ol.js.map ) ve kitaplık CSS'sini ( ol.css kaynak eşlemi ile ol.css.map ) içerir. |
v6.5.0.zip | Yukarıdakilerin yanı sıra örnekleri, API belgelerini ve kaynakları içerir. |
Bu eğitimde, uygulamamızı paketlemek için Parcel'i kullanacağız. README'den bağlantılı olan birkaç seçenek daha vardır.
İlk adımlar
Projeniz için yeni bir boş dizin oluşturun ve çalıştırarak ona gidin mkdir new-project && cd new-project
. İle projenizi başlatın
npm init
Bu, package.json
çalışma dizininizde bir dosya oluşturacaktır . OpenLayers'ı uygulamanıza bağımlılık olarak ekleyin
npm install ol
Bu noktada NPM'den gerekli geliştirme bağımlılıklarını eklemesini isteyebilirsiniz.
npm install --save-dev parcel-bundler
Uygulama kodu ve index.html
Uygulama kodunuzu yerleştirin index.js
. İşte basit bir başlangıç ??noktası:
index.html
Paketinizi kullanacak bir dosyaya da ihtiyacınız olacak. İşte basit bir örnek:
Bir paket oluşturmak
İki ek satır ile package.json
komutları tanıtabilir npm run build
ve npm start
paketinizi manuel olarak oluşturabilir ve sırasıyla değişiklikleri izleyebilirsiniz. Son package.json
iki ek komutla "start"
ve şöyle "build"
görünmelidir:
Bu kadar. Şimdi uygulamanızı çalıştırmak için şunu girin:
npm start
konsolunuzda. Uygulamanızı test etmek için tarayıcınızda http: // localhost: 1234 / adresini açın. Bir şeyi her değiştirdiğinizde, değişikliklerinizin sonucunu göstermek için sayfa otomatik olarak yeniden yüklenecektir.
Tüm uygulama kodunuzu ve uygulamanızda kullanılan tüm bağımlılıkları içeren tek bir JavaScript dosyasının oluşturulduğunu unutmayın. OpenLayers paketinden yalnızca gerekli bileşenleri içerir.
Uygulamanızın bir üretim paketini oluşturmak için şunu yazın:
npm run build
ve dist/
klasörünü sunucunuza kopyalayın .
Bir sayfaya harita yerleştirin
Aşağıda eksiksiz bir çalışma örneği bulacaksınız. Yeni bir dosya oluşturun, aşağıdaki içeriği kopyalayın ve bir tarayıcıda açın:
Neler oldu?
Bir haritaya bir web sayfası eklemek için 3 şeye ihtiyacınız olacak:
- OpenLayers'ı dahil et
<div>
harita kapsayıcı- Basit bir harita oluşturmak için JavaScript
OpenLayers'ı dahil et
İlk bölüm JavaScript kitaplığını dahil etmektir. Bu eğiticinin amacı için, burada tüm kütüphaneyi almak için openlayers.org web sitesini işaret ediyoruz. Bir üretim ortamında, yalnızca uygulamamız için gerekli olan modülü içeren kitaplığın özel bir sürümünü oluştururduk.
İsteğe bağlı: Uygulamanın Internet Explorer veya Android 4.x gibi eski platformlarda çalışması amaçlanıyorsa, OpenLayers'tan önce başka bir komut dosyasının eklenmesi gerekir:
Haritayı içeren <div>
Uygulamadaki harita bir <div>
HTML öğesinin içinde yer alır . Bu <div>
sayede genişlik, yükseklik ve sınır gibi harita özellikleri CSS aracılığıyla kontrol edilebilir. Haritayı 400 piksel yüksekliğinde ve tarayıcı penceresi kadar geniş yapmak için kullanılan CSS öğesi.
Basit bir harita oluşturmak için: JavaScript
Bu JavaScript koduyla, Afrika Doğu sahilinde yakınlaştırılmış bir OSM katmanıyla bir harita nesnesi oluşturulur. Bunu parçalayalım:
Aşağıdaki satır bir OpenLayers Map
nesnesi oluşturur . Sadece kendi başına, ona bağlı hiçbir katman veya etkileşim olmadığından hiçbir şey yapmaz.
Harita nesnesini öğesine eklemek için <div>
, harita nesnesi a'yı target
argümanlara alır . Değeri id
arasında <div>
:
layers: [ ... ]
Dizi haritası mevcut katmanların listesini tanımlamak için kullanılır. Şu anda ilk ve tek katman kiremitli bir katmandır:
OpenLayers'daki katmanlar, bir kaynak içeren bir türle (Görüntü, Döşeme veya Vektör) tanımlanır. Kaynak, harita döşemelerini almak için kullanılan protokoldür.
Map
Nesnenin bir sonraki kısmı View
. Görünüm, haritanın merkezini, çözünürlüğünü ve dönüşünü belirlemeye izin verir. Bir görünümü tanımlamanın en basit yolu, bir merkez noktası ve bir yakınlaştırma seviyesi tanımlamaktır. Yakınlaştırma düzeyi 0'ın uzaklaştırıldığını unutmayın.
center
Belirtilenin enlem / boylam koordinatlarında olduğunu fark edeceksiniz (EPSG: 4326). Kullandığımız tek katman Küresel Mercator projeksiyonunda (EPSG: 3857) olduğundan, haritayı doğru koordinatlarda yakınlaştırabilmek için onları anında yeniden yansıtabiliriz.
Örnek1: Marker kullanılarak oluşturulmuş harita
<html>
<head>
<script src="/html/OpenLayers/v6.5.0-dist/ol.js"></script>
<link rel="stylesheet" href="/html/OpenLayers/v6.5.0-dist/ol.css">
<script src="/html/jquery/jquery-3.5.1.min.js"></script>
<script src="/html/bootstrap/bootstrap-4.3.1-dist/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" href="/html/bootstrap/bootstrap-4.3.1-dist/css/bootstrap.min.css" />
<meta charset="utf-8">
<title>Using Parcel with OpenLayers</title>
<style>
#map-canvas {
width: 640px;
height: 480px;
}
#marker {
width: 20px;
height: 27px;
/*border: 1px solid #088;
border-radius: 10px;
background-color: #0FF;*/
opacity: 0.7;
background-image: url('map-pin.png');
background-size: cover;
/*display: none;*/
}
.popover-content {
min-width: 180px;
}
</style>
</head>
<body>
<div id="map-canvas"></div>
<div id="popup" data-toggle="popover" data-content="Gösterilecek Konum burası"></div>
<div id="marker" title="Marker"></div>
<script type="text/javascript">
<!--
var HaritaMerkezi = ol.proj.fromLonLat([28.979781979490546, 41.00847924916758]);
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
target: 'map-canvas',
view: new ol.View({
//center: [28.96, 41.03],
//center: ol.proj.fromLonLat([16.3725, 48.208889]),
center: HaritaMerkezi,
zoom: 13
//projection: "EPSG:4326"
})
});
//Yer Gosterici
var marker = new ol.Overlay({
position: HaritaMerkezi,
positioning: 'center-center',
element: document.getElementById('marker'),
stopEvent: false
});
map.addOverlay(marker);
//-->
</script>
</body>
</html>
Örnek2: Popup kullanılarak oluşturulmuş harita
<html>
<head>
<script src="/html/OpenLayers/v6.5.0-dist/ol.js"></script>
<link rel="stylesheet" href="/html/OpenLayers/v6.5.0-dist/ol.css">
<script src="/html/jquery/jquery-3.5.1.min.js"></script>
<script src="/html/bootstrap/bootstrap-4.3.1-dist/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" href="/html/bootstrap/bootstrap-4.3.1-dist/css/bootstrap.min.css" />
<meta charset="utf-8">
<title>Using Parcel with OpenLayers</title>
<style>
#map-canvas {
width: 640px;
height: 480px;
}
#marker {
width: 20px;
height: 27px;
/*border: 1px solid #088;
border-radius: 10px;
background-color: #0FF;*/
opacity: 0.7;
background-image: url('map-pin.png');
background-size: cover;
display: none;
}
.popover-content {
min-width: 180px;
}
</style>
</head>
<body>
<div id="map-canvas"></div>
<div id="popup" data-toggle="popover" data-content="Gösterilecek Konum burası"></div>
<div id="marker" title="Marker"></div>
<script type="text/javascript">
<!--
var HaritaMerkezi = ol.proj.fromLonLat([28.979781979490546, 41.00847924916758]);
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
target: 'map-canvas',
view: new ol.View({
//center: [28.96, 41.03],
//center: ol.proj.fromLonLat([16.3725, 48.208889]),
center: HaritaMerkezi,
zoom: 13
//projection: "EPSG:4326"
})
});
//popup
var popup = new ol.Overlay({
element: document.getElementById('popup'),
positioning: 'center-center',
stopEvent: false
});
map.addOverlay(popup);
$(document).ready(function () {
var element = popup.getElement();
var coordinate = HaritaMerkezi;
var hdms = ol.coordinate.toStringHDMS(ol.proj.transform(
coordinate, 'EPSG:3857', 'EPSG:4326'));
popup.setPosition(coordinate);
$(element).popover({
'container': element,
'placement': 'top',
'animation': true,
'html': true
});
$(element).removeClass('d-none');
$(element).popover('show');
});
//-->
</script>
</body>
</html>
Örnek3: Tıklanan Yerin Koordinat Bilgilerini Almak
<html>
<head>
<script src="/html/OpenLayers/v6.5.0-dist/ol.js"></script>
<link rel="stylesheet" href="/html/OpenLayers/v6.5.0-dist/ol.css">
<script src="/html/jquery/jquery-3.5.1.min.js"></script>
<script src="/html/bootstrap/bootstrap-4.3.1-dist/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" href="/html/bootstrap/bootstrap-4.3.1-dist/css/bootstrap.min.css" />
<meta charset="utf-8">
<title>Using Parcel with OpenLayers</title>
<style>
#map-canvas {
width: 640px;
height: 480px;
}
#marker {
width: 20px;
height: 27px;
/*border: 1px solid #088;
border-radius: 10px;
background-color: #0FF;*/
opacity: 0.7;
background-image: url('map-pin.png');
background-size: cover;
/*display: none;*/
}
.popover-content {
min-width: 180px;
}
</style>
</head>
<body>
<div id="map-canvas"></div>
<div id="popup"></div>
<div id="marker" title="Marker"></div>
<script type="text/javascript">
<!--
var HaritaMerkezi = ol.proj.fromLonLat([28.979781979490546, 41.00847924916758]);
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
target: 'map-canvas',
view: new ol.View({
//center: [28.96, 41.03],
//center: ol.proj.fromLonLat([16.3725, 48.208889]),
center: HaritaMerkezi,
zoom: 13
//projection: "EPSG:4326"
})
});
//popup
var popup = new ol.Overlay({
element: document.getElementById('popup'),
positioning: 'center-center',
stopEvent: false
});
map.addOverlay(popup);
var zoomInfo;
map.on("moveend", function() {
zoomInfo = map.getView().getZoom();
});
map.on('click', function (evt) {
//alert(zoomInfo);
var element = popup.getElement();
var coordinate = evt.coordinate;
var hdms = ol.coordinate.toStringHDMS(ol.proj.transform(
coordinate, 'EPSG:3857', 'EPSG:4326'));
var lonlat = ol.proj.transform(evt.coordinate, 'EPSG:3857', 'EPSG:4326');
popup.setPosition(coordinate);
$(element).popover('dispose');
$(element).popover({
'container': element,
'placement': 'top',
'animation': true,
'html': true,
'content': '<p>Tıklanan Yerin Koordinat Bilgisi: <code>' + hdms + '</code></p><p>Long Lat Bilgisi: <code>[' + lonlat[0] + ', ' + lonlat[1] + ']</code></p><p>Zoom değeri: <code>' + zoomInfo + '</code></p>'
});
$(element).popover('show');
});
//-->
</script>
</body>
</html>
Kaynak