1. Map
OpenLayers의 핵심 구성 요소는 맵(ol/Map 모듈의)입니다. 대상 컨테이너 (div 요소)로 렌더링됩니다.
import { Map } from 'ol';
const map = new Map({ target:'map', view: new View({ center: fromLonLat([ ..., ...]), zoom:12 }), layers:[...., ...] })
2. View
Map은 지도의 중심, 확대/축소 수준, 투영과 같은 사항에 대해 책임을 지지 않습니다. 대신 이는 ol/View 인스턴스의 속성입니다.
import { Map, View } from 'ol';
View에는 투영도(Projection) 있습니다. 투영은 center(중심)의 좌표계와 지도 해상도 계산 단위를 결정합니다. 지정하지 않은 경우 기본 투영은 Spherical Mercator(EPSG:3857)이며 미터 단위로 사용합니다.
zoom 은 해상도를 지정하는 편리한 방법입니다. 사용 가능한 확대/축소 수준은 maxZoom(기본값: 28), ZoomFactor(기본값: 2) 및 maxResolution(기본값은 투영의 유효 범위가 256x256 픽셀 타일에 맞는 방식으로 계산됨)에 의해 결정됩니다. 픽셀당 maxResolution 단위의 해상도로 줌 수준 0에서 시작하여 줌수준 maxZoom에 도달할 때까지 이전 줌수준의 해상도를 ZoomFactor로 나누어 후속 확대/축소 수준을 계산합니다.
. Source
레이어에 대한 원격 데이터를 얻기 위해 OpenLayers는 ol/source/Source 하위 클래스를 사용합니다. OpenStreetMap 또는 Bing과 같은 무료 상용 지도 타일 서비스, WMS 또는 WMTS와 같은 OGC(Open Geospatial Consortium) 소스, GeoJSON 또는 KML과 같은 형식의 벡터 데이터에 사용할 수 있습니다.
주요소스는 다음과 같습니다.
OSM (OpenStreetMap)
XYZ
Vector Source
ImageWMS
TileWMS
TileArcGISRest
TileJSON
WebGLPoints
4. Layer
레이어는 source 데이터를 시각적으로 표현한 것입니다. OpenLayers에는 네 가지 기본 유형의 레이어가 있습니다.
import './style.css';
import {Map, View,} from 'ol';
import { fromLonLat } from 'ol/proj';
import Feature from 'ol/Feature';
import Point from 'ol/geom/Point';
import { Style, Icon } from 'ol/style'
import OSM from 'ol/source/OSM';
import XYZ from 'ol/source/XYZ'
import VectorSource from 'ol/source/Vector';
import TileLayer from 'ol/layer/Tile';
import VectorLayer from 'ol/layer/Vector';
// const source = OSM()
const osmStandard = new TileLayer({
source: new OSM(),
title: 'OSMStandard',
visible: true,
});
const vworldLayer = new TileLayer({
source: new XYZ({
url: 'http://api.vworld.kr/req/wmts/1.0.0/{api_Key}/Base/{z}/{y}/{x}.png',
projection: 'EPSG:3857',
}),
title: '브이월드',
visible: false,
preload: 5,
});
const map = new Map({
target: 'map',
view: new View({
center: fromLonLat([126.9780, 37.5665]), // 서울의 좌표
// center: ol.proj.fromLonLat([126.9780, 37.5665]), // 서울의 좌표
// center: [14129640.414119221, 4523441.218824256],
zoom: 12
}),
layers: [osmStandard, vworldLayer]
});
const marker = new Feature({
geometry: new Point(fromLonLat([126.9780, 37.5665]))
});
const vectorLayer = new VectorLayer({
source: new VectorSource({
features: [marker]
}),
style: new Style({
image: new Icon({
anchor: [0.5, 1],// 아이콘의 하단 중심이 위치를 가리키게 설정
src: '/pin_marker.png'
})
})
});
map.addLayer(vectorLayer);
const layerSelect = document.getElementById('layer-select');
layerSelect.onchange = function () {
let selectedLayerTitle = this.value;
map.getLayers().forEach(function (layer) {
if (layer.get('title')) {
layer.setVisible(layer.get('title') === selectedLayerTitle);
}
});
};
위도, 경도 (0) | 2024.05.03 |
---|---|
LF will be replaced by CRLF the next time Git touches it (0) | 2024.04.30 |
Access Token, Admin Key (0) | 2024.04.25 |
네트워크 주소, 호스트 주소, CIDR (0) | 2024.04.25 |
내부테스터 - 안드로이드 (0) | 2024.04.22 |