iClient for Leaflet 空间查询,圆形空间查询

代码片段如下:

function query(_center, _radius) {
    var point_new = L.CRS.EPSG3857.project(_center);
    var dx = point_new.x, dy = point_new.y;
    var radius = _radius;
    //点集
    var parts = [];
    //计算圆的边缘所有点
    for (var i = 0; i < 360; i++) {
        var radians = (i + 1) * Math.PI / 180;
        var circlePoint = [Math.cos(radians) * radius + dx, Math.sin(radians) * radius + dy];
        parts[i] = L.CRS.EPSG3857.unproject(L.point(circlePoint));
    }
    var polygon = L.polygon(parts, { color: 'red' });
    polygon.addTo(_this.map);
    var geometry = L.Util.transform(polygon, L.CRS.EPSG4326, L.CRS.EPSG3857);
    var geometryParam = new SuperMap.GetFeaturesByGeometryParameters({
        datasetNames: ["数据源名称:数据集名称"],
        geometry: geometry,
        spatialQueryMode: "INTERSECT"
    });
    var url = '数据服务地址', resultLayer;
    L.supermap
        .featureService(url)
        .getFeaturesByGeometry(geometryParam, function (serviceResult) {
            var iconSize = [48 * _this.rem, 48 * _this.rem], iconAnchor = [24 * _this.rem, 24 * _this.rem]
            var icon_0= L.icon({ iconUrl: "icon_0.png", iconSize, iconAnchor })
                , icon_1= L.icon({ iconUrl: "icon_1.png", iconSize, iconAnchor })
                , icon_2= L.icon({ iconUrl: "icon_2.png", iconSize, iconAnchor });
            resultLayer = L.geoJSON(serviceResult.result.features, {
                pointToLayer: function (feature, latlng) {
                    var _latlng = [feature.properties.T_LATITUDE, feature.properties.T_LONGITUDE];
                    var _type = Number(feature.properties.T_TYPE == null ? -1 : feature.properties.T_TYPE);
                    switch (_type) {
                        case 0: return L.marker(_latlng, { icon: icon_0});
                        case 1: return L.marker(_latlng, { icon: icon_1});
                        case 2: return L.marker(_latlng, { icon: icon_2});
                        default: return L.marker(_latlng);
                    }
                }
            }).addTo(_this.map);

        });

 

需求说明:
先要在地图上绘制一个正圆,得到圆形内所有的点要素。
问题描述:
       正常来说通过不管是通过leafletiClient for Leafletleaflet draw 中哪一个来绘制这个圆,得到的结果始终只有一个中心点(圆心)坐标位置。这里我地图服务用的是iServer,查询使用超图的L.supermap.featureService(url).getFeaturesByGeometry(params, callback, resultFormat)方法进行空间查询,然而超图的空间查询只支持以下几种几何查询。显然是没有可以直接用的圆形几何对象。

 问题解决:

       看起来并没有那么糟糕,这里还有一个中心点可以用。那么想想看圆形也是多边形,刚好这里有一个L.Polygon的几何对象,它只要一组点集就可以构成一个圆形多边形。那么我们可以通过这个点和半径来构成无数个点,将这些个点集组装起来,那么就得到了一个圆形多边形了。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值