使用Leaflet显示geojson featureCollection

t书

使用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添加到地图?

安德鲁·里德(Andrew Reid)

问题是您的数据是投影的-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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

GeoJSON 是否支持 FeatureCollection 列表?

Geojson Point FeatureCollection插入变量

将GeoJSON响应转换为FeatureCollection

弹性:存储“ FeatureCollection”类型的GeoJSON,并查询

geoJSON:如何使用动态数量的功能创建FeatureCollection?

如何在传单中设置 geoJSON FeatureCollection 的样式?

在DefaultHttpContext上使用FeatureCollection时,响应对象为null

Feature Layer正在使用从RasterToVectorProcess派生的featurecollection获得空边界

将 rgee 和 fastDistanceTransform 与 featureCollection 一起使用

将NetTopologySuite FeatureCollection序列化为GeoJSON时遇到问题

从R中的geojson FeatureCollection读取单个特征的一般方法

在MongoDB中截取FeatureCollection

如何附加两个FeatureCollection?

D3js地图:GeometryCollection与FeatureCollection

如何将FeatureCollection转换为GeometryCollection或MultiPolygon?

使用react-leaflet渲染GeoJSON

如何使用Leaflet编辑已加载的geoJson

“无效的GeoJSON对象。” 使用Leaflet和Leaflet-ajax

GeoJSON标记未显示在我的leaflet.js地图上

Leaflet中的geoJSON:显示与列表中的值匹配的特征

使用D3渲染geoJSON,使用imageOverlay渲染Leaflet

如何在Leaflet-Tilelayer-Geojson中使用圆形标记

如何使用Leaflet分别设置GeoJSON GeometryCollection的每个几何

react-leaflet:使用组件作为 GeoJSON 功能的弹出窗口

将Leaflet.Label与GeoJSON点一起使用

使用LEaflet查看多个geoJSon文件到视图中

D3 Topojson 将名称属性添加到 FeatureCollection

如何将 2 个 JSON 文件合并为一个 JSON FeatureCollection

R Leaflet GeoJSON着色