gpt4 book ai didi

javascript - 从数据库加载标记作为可切换层

转载 作者:行者123 更新时间:2023-11-30 00:11:27 25 4
gpt4 key购买 nike

我正在尝试将数据库中的标记作为图层加载到我的谷歌地图中。我已经在加载 KML 图层,但我希望用户能够在我的数据库中保存和加载他们自己的自定义标记。

我的数据库结构是这样的:

| ID | TITLE | LAT | LON |

由于每个用户都有自己的自定义点,我想获取用户的点并将它们作为 map 上除其他默认图层 (KML) 之外的图层加载。我读到创建数据层是最好的方法,并且还使用了我仍然不知道如何从我的数据库创建的 geoJSON。

目前,我正在使用一个通用的 json 文件,只是想看看我是否真的可以将其添加为可切换层,但我无法正确处理。一旦我开始工作,我就可以弄清楚如何从数据库中获取结果并将其格式化为 geoJSON 并添加到 map 中。

这就是我尝试将 json 数据作为可切换层获取的方式,但它不起作用:

function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: -49.7770641, lng: 55.6602758},
zoom: 6,
mapTypeControlOptions: {
position: google.maps.ControlPosition.RIGHT_TOP
},

});

layers[0] = new google.maps.KmlLayer('http://www.example.com/kmllayer1.kml', {preserveViewport: true, suppressInfoWindows: false, zIndex: 1});
layers[1] = new google.maps.KmlLayer('http://www.example.com/kmllayer2.kml', {preserveViewport: true, zIndex: 2, suppressInfoWindows: true});
layers[2] = map.data.loadGeoJson('https://storage.googleapis.com/maps-devrel/google.json');
for (var i = 0; i < layers.length; i++) {
layers[i].setMap(map);
}
}
function toggleLayer(i) {
if(layers[i].getMap() === null) {
layers[i].setMap(map);
}
else {
layers[i].setMap(null);
}
}

最佳答案

数据层不同于KmlLayer , .loadGeoJson 方法返回 Data.Feature 的数组对象。来自 the documentation :

addGeoJson(geoJson:Object, options?:Data.GeoJsonOptions)

Return Value: Array<Data.Feature>

Adds GeoJSON features to the collection. Give this method a parsed JSON. The imported features are returned. Throws an exception if the GeoJSON could not be imported.

像这样将它添加到你的层数组中(注意只有一个):

layers[2] = map.data;
layers[2].loadGeoJson(GEOJSON_URL);

proof of concept fiddle

代码片段:

var geocoder;
var map;
var layers = [];

function toggleLayer(i) {
if (layers[i].getMap() === null) {
layers[i].setMap(map);
} else {
layers[i].setMap(null);
}
}

function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {
lat: 43,
lng: -87
},
zoom: 4,
mapTypeControlOptions: {
position: google.maps.ControlPosition.RIGHT_TOP
},

});

layers[0] = new google.maps.KmlLayer('http://googlemaps.github.io/js-v2-samples/ggeoxml/cta.kml', {
preserveViewport: true,
suppressInfoWindows: false,
zIndex: 2
});
layers[1] = new google.maps.KmlLayer('https://developers.google.com/kml/documentation/us_states.kml', {
preserveViewport: true,
zIndex: 1,
suppressInfoWindows: true
});
layers[2] = map.data;
layers[2].loadGeoJson('http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.geojson');
for (var i = 0; i < layers.length; i++) {
layers[i].setMap(map);
}
var btns = document.getElementsByClassName("btn");
for (var i = 0; i < btns.length; i++) {
google.maps.event.addDomListener(btns[i], 'click', (function(i) {
return function() {
toggleLayer(i);
}
})(i));
}
}

google.maps.event.addDomListener(window, "load", initMap);
html,
body,
#map {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<input class="btn" id="btn0" type="button" value="0" />
<input class="btn" id="btn1" type="button" value="1" />
<input class="btn" id="btn2" type="button" value="2" />
<div id="map"></div>

关于javascript - 从数据库加载标记作为可切换层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36332538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com