既にロードされた点と右クリックされた点の間に線を追加しようとしています。私はMapboxの例を参照して、この段階まで来ました。私は操作を初めて実行するときに1行しか得られません。私はそれぞれの操作のための行が必要です。次のように操作の順序は以下のとおりです。GeoJson LineString Mapboxで最初にクリックした後に一度だけロードする
- 左クリックし、ロードされた時点(にGeoJSONからロードされた時点)
- を右地図上の任意の場所をクリックします。 これは、右クリックされたポイントにマーカーを作成し、それを前の左のclcikedポイントと結合する必要があります。
私はいくつかの助けに感謝します。これは私の最初の投稿です。私の最後からの間違いをお許しください。前もって感謝します。
mapboxgl.accessToken = 'pk.eyJ1Ijoic3ViaGFtYmFuc3BocyIsImEiOiJjajc4czNxazEyaWE5MnFwaWllNzdwdDdkIn0.6AZVCVM-wGgh5cykoII9kA';
var map = new mapboxgl.Map({
container: 'map', // container id
style: 'mapbox://styles/mapbox/streets-v9',
center: [-80.486052, 37.830348], // starting position
zoom: 5 // starting zoom
});
map.on('load',() => {
map.addSource("earthquakes", {
type: "geojson",
data: "https://www.mapbox.com/mapbox-gl-js/assets/earthquakes.geojson"
});
map.addLayer({
id: "markers",
type: "circle",
source: "earthquakes",
paint: {
"circle-color": "#11b4da",
"circle-radius": 4,
"circle-stroke-width": 1,
"circle-stroke-color": "#fff"
}
});
});
map.on('mouseenter', 'markers',() => {
map.getCanvas().style.cursor = 'pointer'
});
map.on('mouseleave', 'markers',() => {
map.getCanvas().style.cursor = 'crosshair'
});
let ground
let obs
map.on('contextmenu', (f) => {
ground = [f.lngLat.lng, f.lngLat.lat]
var geojson = {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": f.lngLat
}
}]
};
// add markers to map
geojson.features.forEach(function(marker) {
// create a DOM element for the marker
var el = document.createElement('div');
el.className = 'marker';
el.addEventListener('click', function() {
window.alert(f.lngLat);
})
new mapboxgl.Marker(el)
.setLngLat(marker.geometry.coordinates)
.addTo(map);
map.addLayer({
"id": "route",
"type": "line",
"source": {
"type": "geojson",
"data": {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
ground, obs
]
}
}, ]
}
},
"layout": {
"line-join": "round",
"line-cap": "round"
},
"paint": {
"line-color": "#888",
"line-width": 3,
"line-dasharray": [0.1, 1.8]
}
});
});
})
map.on('click', 'markers', (e) => {
obs = [e.lngLat.lng, e.lngLat.lat]
});
body {
margin: 0;
padding: 0;
}
#map {
position: absolute;
top: 0;
bottom: 0;
width: 100%;
}
.marker {
display: block;
border: none;
border-radius: 50%;
cursor: pointer;
padding: 0;
background-color: rgba(5, 4, 244, 0.82);
height: 10px;
width: 10px
}
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<title></title>
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
<script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.40.1/mapbox-gl.js'></script>
<link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.40.1/mapbox-gl.css' rel='stylesheet' />
</head>
<body>
<div id='map'></div>
</body>
</html>
P.S:ブラウザコンソールには、次の情報が表示されます。エラー:既にこのIDを持つソースがあります。 –