Я работаю над картой arcgis, пытаюсь обновить центр карты, вызывая goTo () в моем виде карты, но по какой-то причине карта просто меняется на пустую и никогда не обновляется, я записываю новые координаты и они правильные.
Я использую справочные документы здесь: https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html
Может ли кто-нибудь с некоторым опытом ArcGIS помочь мне. Я знаю, что это не проблема с моим кодом, но это может быть проблема с vue и рендерингом компонентов, так как я до сих пор пытался - избавиться от подпорок и обновить все, что есть в arcgis
компонент локально - используя клавиши для принудительного повторного рендеринга компонента
в качестве интересной заметки, если я просто введу несколько магических чисел c для моего нового местоположения, карта обновится правильно, однако, когда я использую какую-то функцию чтобы получить местоположение и затем передать его, оно не работает и просто показывает как пустую карту
мое приложение. 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>