【Leaflet.js】주소로부터 위도 경도를 취득해 그 지점에 핀을 세운다
이번에는 Leaflet 지도에 주소 검색 기능을 추가하고 싶습니다.
만들고 싶은 것
Leaflet 지도 준비
파일 구성
.
├── index.html
└── main.js
index.html
.
├── index.html
└── main.js
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>住所検索</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.min.css">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.min.js"></script>
<style>
#mymap {
height: 500px;
width: 500px;
}
</style>
</head>
<body>
<input type="text" id="address" />
<button id="search">検索</button>
<div id="mymap"></div>
<script type="module" src="./main.js"></script>
</body>
</html>
main.js
main.js
const map = L.map("mymap", {
center: [35.021028, 135.755583],
zoom: 15
});
const baseLayer = L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", {
attribution: "© <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap</a> contributors'"
});
baseLayer.addTo(map);
주소 입력을 받고 위도 경도를 구한다
geolonia/normalize-japanese-addresses 소개
주소에서 위도 경도를 얻으려면 오픈 소스 주소 정규화 라이브러리 geolonia/normalize-japanese-addresses을 사용하십시오.
이 라이브러리는 인수에 부여한 주소를 퍼스·정규화한 후, Geolonia 주소 데이터 에 근거해 그 지역의 대표점의 위도 경도를 돌려줍니다.
버전 2.3.0부터 ES Modules 형식에 해당하는 것처럼 import 절을 사용하여 로드할 수 있습니다. 사용 예를 아래에 나타냅니다.
사용 예import { normalize } from 'https://cdn.skypack.dev/@geolonia/normalize-japanese-addresses';
normalize("滋賀県大津市御陵町3-1").then(result => {
console.log(result);
});
출력{
pref: "滋賀県",
city: "大津市",
town: "御陵町",
addr: "3-1",
lat: 35.018665,
lng: 135.855868,
level: 3
}
Leaflet 지도에 고정하는 방법
bindPopup
의 인수에는 HTML 태그를 넣거나 할 수도 있습니다만, 자세한 것은 생략합니다. 공식 문서을 참조하십시오.
const latitude = 35.018665; // 緯度
const longitude = 135.855868; // 経度
const marker = L.marker([latitude, longitude]); // markerオブジェクトを作成
marker.bindPopup("大津市役所"); // markerをクリックしたとき"大津市役所"と表示されるようにする
marker.addTo(map); // markerをLeaflet地図に追加
그리고, 핀을 세워도 표시 범위에 없으면 변화를 알 수 없기 때문에, 핀을 세우는 것과 동시에 지도의 표시 범위도 그 지점으로 이동하도록 합시다.
map.flyTo([latitude, longitude]);
코드 조립
처음 준비한 코드를 다음과 같이 다시 작성합니다.
index.html
변경 없음
main.js
main.jsimport { normalize } from 'https://cdn.skypack.dev/@geolonia/normalize-japanese-addresses'
const map = L.map("mymap", {
center: [35.021028, 135.755583],
zoom: 15
});
const baseLayer = L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", {
attribution: "© <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap</a> contributors'"
});
baseLayer.addTo(map);
// 以下を追加
document.getElementById("search").addEventListener("click", () => {
const address = document.getElementById("address").value;
normalize(address).then(result => {
map.flyTo([result.lat, result.lng]); // 住所の地点に移動
const marker = L.marker([result.lat, result.lng]); // ピンを作成
marker.bindPopup(address); // ピンをクリックすると住所が表示されるようにする
marker.addTo(map); // 地図にピンを立てる
});
});
완성!
이것으로 우선 움직이는 것이 생겼습니다!
홍보
이 기사에서 작성한 프로그램에 에러 처리의 추가나 인터페이스의 개량을 실시한 것을 Leaflet 플러그인으로서 공개했습니다!
Cocon/Leaflet.CommunityGeoCoder
실제로 만져 움직일 수 있는 데모 페이지도 만들어 보았습니다. 꼭 활용해 주셔, 버그나 기능 제안등 있으면 부담없이 부탁드립니다.
Demo | Cocon/Leaflet.CommunityGeoCoder
Reference
이 문제에 관하여(【Leaflet.js】주소로부터 위도 경도를 취득해 그 지점에 핀을 세운다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YuukiToriyama/items/ce9072a0850d31578937
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import { normalize } from 'https://cdn.skypack.dev/@geolonia/normalize-japanese-addresses';
normalize("滋賀県大津市御陵町3-1").then(result => {
console.log(result);
});
{
pref: "滋賀県",
city: "大津市",
town: "御陵町",
addr: "3-1",
lat: 35.018665,
lng: 135.855868,
level: 3
}
bindPopup
의 인수에는 HTML 태그를 넣거나 할 수도 있습니다만, 자세한 것은 생략합니다. 공식 문서을 참조하십시오.const latitude = 35.018665; // 緯度
const longitude = 135.855868; // 経度
const marker = L.marker([latitude, longitude]); // markerオブジェクトを作成
marker.bindPopup("大津市役所"); // markerをクリックしたとき"大津市役所"と表示されるようにする
marker.addTo(map); // markerをLeaflet地図に追加
그리고, 핀을 세워도 표시 범위에 없으면 변화를 알 수 없기 때문에, 핀을 세우는 것과 동시에 지도의 표시 범위도 그 지점으로 이동하도록 합시다.
map.flyTo([latitude, longitude]);
코드 조립
처음 준비한 코드를 다음과 같이 다시 작성합니다.
index.html
변경 없음
main.js
main.jsimport { normalize } from 'https://cdn.skypack.dev/@geolonia/normalize-japanese-addresses'
const map = L.map("mymap", {
center: [35.021028, 135.755583],
zoom: 15
});
const baseLayer = L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", {
attribution: "© <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap</a> contributors'"
});
baseLayer.addTo(map);
// 以下を追加
document.getElementById("search").addEventListener("click", () => {
const address = document.getElementById("address").value;
normalize(address).then(result => {
map.flyTo([result.lat, result.lng]); // 住所の地点に移動
const marker = L.marker([result.lat, result.lng]); // ピンを作成
marker.bindPopup(address); // ピンをクリックすると住所が表示されるようにする
marker.addTo(map); // 地図にピンを立てる
});
});
완성!
이것으로 우선 움직이는 것이 생겼습니다!
홍보
이 기사에서 작성한 프로그램에 에러 처리의 추가나 인터페이스의 개량을 실시한 것을 Leaflet 플러그인으로서 공개했습니다!
Cocon/Leaflet.CommunityGeoCoder
실제로 만져 움직일 수 있는 데모 페이지도 만들어 보았습니다. 꼭 활용해 주셔, 버그나 기능 제안등 있으면 부담없이 부탁드립니다.
Demo | Cocon/Leaflet.CommunityGeoCoder
Reference
이 문제에 관하여(【Leaflet.js】주소로부터 위도 경도를 취득해 그 지점에 핀을 세운다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YuukiToriyama/items/ce9072a0850d31578937
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import { normalize } from 'https://cdn.skypack.dev/@geolonia/normalize-japanese-addresses'
const map = L.map("mymap", {
center: [35.021028, 135.755583],
zoom: 15
});
const baseLayer = L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", {
attribution: "© <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap</a> contributors'"
});
baseLayer.addTo(map);
// 以下を追加
document.getElementById("search").addEventListener("click", () => {
const address = document.getElementById("address").value;
normalize(address).then(result => {
map.flyTo([result.lat, result.lng]); // 住所の地点に移動
const marker = L.marker([result.lat, result.lng]); // ピンを作成
marker.bindPopup(address); // ピンをクリックすると住所が表示されるようにする
marker.addTo(map); // 地図にピンを立てる
});
});
이 기사에서 작성한 프로그램에 에러 처리의 추가나 인터페이스의 개량을 실시한 것을 Leaflet 플러그인으로서 공개했습니다!
Cocon/Leaflet.CommunityGeoCoder
실제로 만져 움직일 수 있는 데모 페이지도 만들어 보았습니다. 꼭 활용해 주셔, 버그나 기능 제안등 있으면 부담없이 부탁드립니다.
Demo | Cocon/Leaflet.CommunityGeoCoder
Reference
이 문제에 관하여(【Leaflet.js】주소로부터 위도 경도를 취득해 그 지점에 핀을 세운다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/YuukiToriyama/items/ce9072a0850d31578937텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)