使用QGIS,我已经将多边形图层导出为geojson,我希望通过传单发布该图层。这是geojson的样子[由于SO字符限制而被排除在外]:https : //gist.github.com/t-book/88806d12d7f05024b147715be82e6844
这是我尝试过的:
将geojson包装为var:
var states = [{
"type": "FeatureCollection",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::31468" } },
"features": [
{ "type": "Feature", "properties": ...
}];
添加为新图层:
L.geoJSON(states, {
style: function(feature) {
switch (feature.properties.party) {
case 'Euerbach': return {color: "#ff0000"};
case 'Werneck': return {color: "#0000ff"};
}
}
}).addTo(map);
不幸的是,什么也没有呈现。如何正确将此geojson FeatureCollection添加到地图?
问题是您的数据是投影的-Leaflet期望您的数据是非投影的(由长/纬对组成,或在WGS84 / EPSG 4326中为“投影”)。有几种解决方案,这里有两个解决方案:
在QGIS中,导出数据,使其由长/纬坐标对组成
显示geojson时,使用proj4.js重新投影坐标。
对于第二个,在将geojson添加为图层时,您需要设置coordsToLatLng选项:
var geojson = L.geoJSON(states, {
coordsToLatLng: function (p) {
// return get lat/lng point here.
})
该函数的主体将在geojson的坐标参考系统(CRS)中获取一个坐标,并使用proj4在WGS84中将其返回。
另外,coordsToLatLng函数希望您返回经纬度对。由于您的geojson和proj4表示[x,y]的数据,因此我们需要在返回新点之前交换值。
可能看起来像:
var geojson = L.geoJSON(states, {
coordsToLatLng: function (p) {
p = proj4(fromProjection,toProjection,p); // reproject each point
p = [p[1],p[0]] // swap the values
return p; // return the lat/lng pair
}
}).addTo(map);
当然,我们需要定义我们的CRS。我抬头一看你的CRS上(它以GeoJSON本身指定)spatialreference.org和用于该CRS和EPSG4326(WGS84)来设置我的fromProjection和toPojection所提供的描述:
var fromProjection = '+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs ';
var toProjection = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ";
总之,让我们的东西是这样。请记住,如果文件很大,则用javascript重新投影它们所花费的时间要比使用适当的CRS导出文件所花费的时间更长。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句