저는 arcgis지도에서 작업 중입니다. 내지도보기에서 goTo ()를 호출하여지도 중심을 업데이트하려고하지만 어떤 이유로지도가 공백으로 변경되고 업데이트되지 않습니다. 새 좌표를 기록하고 있으며 정확합니다. .
https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html 에서 참조 문서를 사용하고 있습니다.
일부 arcgis 경험을 가진 사람이 나를 도울 수 있습니까? 나는 이것이 내 코드에서 특별히 문제가 아니라는 것을 알고 있지만 arcgis와 관련하여 vue 및 구성 요소 렌더링 문제 일 수 있습니다.
지금까지 나는 소품을 제거하고 구성 요소 내의 모든 것을 로컬로 업데이트-키를 사용하여 구성 요소를 강제로 다시 렌더링했습니다.
흥미로운 점은 새 위치에 매직 넘버를 입력하면지도가 올바르게 업데이트되지만 일부 기능을 사용하여 위치를 가져 와서 전달하면 작동하지 않고 빈지도로 표시됩니다.
내 app.vue
<template>
<div id="app">
<web-map v-bind:centerX="lat" v-bind:centerY="long" ref="map"/>
<div class="center">
<b-button class="btn-block" @click="updateCenter()" variant="primary">My Location</b-button>
</div>
</div>
</template>
<script>
import WebMap from './components/webmap.vue';
export default {
name: 'App',
components: { WebMap },
data(){
return{
lat: null,
long: null,
}
},
methods:{
updateCenter(){
this.$refs.map.getLocation()
}
},
};
</script>
내지도 구성 요소
<template>
<div></div>
</template>
<script>
import { loadModules } from 'esri-loader';
export default {
name: 'web-map',
data: function(){
return{
X: -118,
Y: 34,
}
},
mounted() {
console.log('new data',this.X,this.Y)
// lazy load the required ArcGIS API for JavaScript modules and CSS
loadModules(['esri/Map', 'esri/views/MapView'], { css: true })
.then(([ArcGISMap, MapView]) => {
const map = new ArcGISMap({
basemap: 'topo-vector'
});
this.view = new MapView({
container: this.$el,
map: map,
center: [-118,34], ///USE PROPS HERE FOR NEW CENTER
zoom: 8
});
});
},
beforeDestroy() {
if (this.view) {
// destroy the map view
this.view.container = null;
}
},
methods:{
showPos(pos){
console.log('new location',pos.coords.latitude,pos.coords.longitude)
this.view.goTo({center:[pos.coords.latitude,pos.coords.longitude]})
},
getLocation(){
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(this.showPos);
} else {
console.log("Geolocation is not supported by this browser.");
}
},
}
};
</script>
다음은 작동하는 것입니다.
https://codesandbox.io/s/frosty-glitter-39wpe?file=/src/App.vue
나는 처음부터 그것을 만들었고, 당신의 작은 부분만을 가져 와서 ArcGIS의 몇 가지 예제와 결합했습니다 (전혀 익숙하지 않습니다).
한 가지 주목할 점은 .goTo({center: [lat, long]})
예상대로 작동하지 않았다는 것입니다. 일부 바다 한가운데 중앙에 계속 배치되었습니다.
그런 다음 예상 결과를 생성하는 것처럼 보이는 as 에서 Point를 가져 esri
오고 전달했습니다 . 작동하기 때문에 더 이상 보지 않았지만 변환 없이도 가능해야한다고 생각합니다. 이 선을 따라 좌표계 또는 무언가를 전달해야 할 것입니다.center
new Point(long, lat)
내가 말할 수있는 한, 귀하의 예에서 잘못된 것은 부모에서 자식으로 데이터를 전달하려는 방식입니다. this.$refs.map
Vue 인스턴스가 될 것으로 예상 하지만 그렇지 않습니다. DOM 요소입니다. 기본적으로 Vue 인스턴스의 $el
. 부모 인스턴스에서 자식 메서드에 액세스하는 것은 그리 간단하지 않습니다. 통지에 또 다른 것은 당신이 바인드에도 불구하고, 즉 centerX
및 centerY
귀하의 예제에서 아이에, 당신이 그들을 사용하는 것 없다 (그러나 나는 당신이 소품 시도 할 때부터 단지가 남은 것 같아요!?).
어쨌든, 제 예에서 저는 아이들의 coords prop을 간단히 업데이트하고 watch
re-centering을 처리 하는 fn을 선택했습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다