Leaflet中的L.geoJSON一个坑

 最近在使用 SuperMap iClient 9D for Leaflet 中的 L.supermap.queryService(url).queryByGeometry()接口 来定位某个建筑图斑时,发现2个问题。

1、查不出来

2、查出来了,却显示不出来

具体的说下:

L.supermap.tiledMapLayer(url, {
    transparent: true,
    maxZoom: 24,
    minZoom: 13
}).addTo(map);
把iserver中的地图加载,地图是3857的坐标系。

点击map时,触发查询。

map.on("click", function (e) {
    identifyBuilding(e);
});
e中有坐标信息,获取出来的是经纬度坐标。

var latlng = e.latlng; 
var point = L.point(latlng.lon, latlng.lat);
var param = new SuperMap.QueryByGeometryParameters({
        queryParams: {name: "建筑@manager"},
        geometry: point,
        expectCount: 1,
        networkType: SuperMap.GeometryType.REGION,
        queryOption: SuperMap.QueryOption.ATTRIBUTEANDGEOMETRY,
        spatialQueryMode: SuperMap.SpatialQueryMode.INTERSECT
});
L.supermap.queryService(url).queryByGeometry(param, function (serviceResult) {....});

结果没有返回。。。悲剧了。。。怎么设置查询参数都没有用。。。

前后试了快1个小时,最终发现,几何查询的对象所使用的坐标系要和地图坐标系保持一致。。。

遂改point

 var point = L.CRS.EPSG3857.project(L.latLng(latlng.lat, latlng.lng)); 
把经纬度改为大地坐标,用 L.CRS.EPSG3857.project 静态方法把4326的坐标转为3857的坐标。。。

再查询,结果正常。。。但是使用L.geojson把查询出来的要素显示出来时又不出来了。。。

继续悲剧了。。。

 var result = serviceResult.result;
 L.geoJSON(result.recordsets[0].features).addTo(map);
继续查询文档,发现有个coordsToLatLng参数,A Function that will be used for converting GeoJSON coordinates to LatLngs. The default is the coordsToLatLng static method. 似乎意思是需要经纬度。。。。

遂改。。

 var result = serviceResult.result;
 L.geoJSON(result.recordsets[0].features, {
     coordsToLatLng: function (coords) {
                            return L.CRS.EPSG3857.unproject(L.point(coords[0], coords[1]));
                        }
}).addTo(map);
这个时候出来了。。。。

总结:1、几何查询对象的坐标系要与地图坐标系保持一致

2、geojson要经纬度,不是经纬度的要先转成经纬度。


————————————————
版权声明:本文为CSDN博主「fengyekafei」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fengyekafei/article/details/79852965

HTML本身并不直接支持`.geojson`文件的引入,因为HTML是一种标记语言,用于展示内容,而不是处理数据。然而,你可以通过JavaScript或其他前端库来加载和显示`.geojson`文件。 通常的做法是结合使用JavaScript库,如Leaflet、Three.js等地理信息系统库,它们允许你在HTML页面上交互式地显示地理信息。要将`.geojson`文件引入到HTML,你需要: 1. 使用`<script>`标签引用一个JavaScript库,例如`<script src="path/to/geohash.js"></script>`。 2. 创建一个`<div>`或者其他容器元素,用于后续地图渲染。 3. 利用JavaScript读取`.geojson`文件,这通常通过Ajax请求获取服务器上的数据(例如`fetch`或`XMLHttpRequest`)。 4. 解析获取到的`.geojson`数据,并利用库提供的方法将其添加到地图上。 例如,在Leaflet,可以这样做: ```html <!DOCTYPE html> <html lang="en"> <head> <title>GeoJSON Example</title> <link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" /> <script src="https://unpkg.com/leaflet/dist/leaflet.js"></script> </head> <body> <div id="mapid" style="height: 500px;"></div> <script> fetch('path/to/your.geojson') .then(response => response.json()) .then(data => { L.geoJson(data).addTo(map); }); var map = L.map('mapid').setView([51.505, -0.09], 13); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: 'Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors', maxZoom: 18, }).addTo(map); </script> </body> </html> ``` 在这个例子,`.geojson`文件的数据会被添加到 Leaflet 地图上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值