识别面:判断面是否与边界相交。FeatureCollection fc边界, SimpleFeatureCollection gs预警区域多边形

//识别面:判断面是否与边界相交。FeatureCollection fc边界, SimpleFeatureCollection gs预警区域多边形
public static  FeatureSource identifyRegionFeatureCollectionReversal(SimpleFeatureCollection bdyfeatures, SimpleFeatureCollection warnfeatures) {
    long startTime = System.currentTimeMillis();// 开始时间
    FeatureSource cs = null;
    try {
        List<Map<String, Object>> values = new ArrayList<Map<String, Object>>();
        // 多边形(预警区域多边形)
        FeatureIterator bdyFeatureIterator = bdyfeatures.features();
        String fields = "crs:4326,the_geom:MultiPolygon,";
        Integer isAllFields = 0;
        // 迭代读取数据记录(边界循环187个)
        while (bdyFeatureIterator.hasNext()) {
            // 数据下一条数据
            Feature bdyFeature = bdyFeatureIterator.next();
            // 数据"the_geom"属性的值
            if(bdyFeature.getProperty("the_geom") == null || bdyFeature.getProperty("the_geom").getValue() == null) continue;
            Geometry bdyGeometry = (Geometry) bdyFeature.getProperty("the_geom").getValue();
            if(!bdyGeometry.isValid() && !bdyGeometry.buffer(0).toString().equals("POLYGON EMPTY")){
                //System.out.println(bdyFeature.getProperty("PAC").getValue() + "行政区划边界范围bdyGeometry:是无效的,buffer(0)修复几何。" + "\r\n");
                bdyGeometry = bdyGeometry.buffer(0);
            }
            // 预警区域数据(预警循环1410个)
            FeatureIterator warnFeatureIterator = warnfeatures.features();
            while (warnFeatureIterator.hasNext()) {
                //获取行政区划边界信息
                Feature warnFeature = warnFeatureIterator.next();
                if(warnFeature.getProperty("geometry") == null || warnFeature.getProperty("geometry").getValue() == null) continue;
                Geometry warnGeometry= (Geometry) warnFeature.getProperty("geometry").getValue();
                try{
                    //(2)这里需要修改为,将相交的部分保存出去,并可以计算他的面积信息
                    //查询多边形的有效性
                    if(!warnGeometry.isValid() && !warnGeometry.buffer(0).toString().equals("POLYGON EMPTY")){
                        //System.out.println("预警范围warnGeometry:是无效的,buffer(0)修复几何。" + "\r\n");
                        warnGeometry = warnGeometry.buffer(0);
                    }
                    //判断当前预警区域warnGeometry与行政区划boundaryGeometry是否相交
                    if (warnGeometry.intersects(bdyGeometry)) {
                        Map<String, Object> map = new HashMap<String, Object>();
                        //(1)这个以前是将相交的行政区划的边界,全部都存储起来,
                        //map.put("the_geom", boundaryGeometry);
                        //求相交之后的区域
                        //Geometry intersectGeom = bdyGeometry.intersection(warnGeometry);
                        //反转一下
                        Geometry intersectGeom = warnGeometry.intersection(bdyGeometry);
                        map.put("the_geom", intersectGeom);
                        //将行政区划boundaryFeature的其他属性信息,存入到最新的属性信息中
                        Iterator<Property> iterator1 = warnFeature.getProperties().iterator();
                        while(iterator1.hasNext())
                        {
                            String key = iterator1.next().getName().toString();
                            if(key !="geometry"){
                                map.put(key, warnFeature.getProperty(key).getValue().toString());
                                if(isAllFields==0){
                                    fields=fields+key+":String,";
                                }
                            }
                        }
                        //将预警区域warnFeature的其他属性信息,存入到最新的属性信息中
                        Iterator<Property> iterator2 = bdyFeature.getProperties().iterator();
                        while(iterator2.hasNext())
                        {
                            String key = iterator2.next().getName().toString();
                            if(key !="the_geom"){
                                map.put(key, bdyFeature.getProperty(key).getValue().toString());
                                if(isAllFields==0){
                                    fields=fields+key+":String,";
                                }
                            }
                        }
                        values.add(map);
                        isAllFields=1;
                    }
                }
                catch (Exception e){
                    System.out.println(bdyFeature.getProperty("PAC").getValue() + "抛出异常,当前的两个Geometry无法执行相交计算" + "\r\n");
                }
            }
            warnFeatureIterator.close();
        }
        bdyFeatureIterator.close();
        //System.out.println("反转--对行政区划进行裁剪和文字识别:"+(System.currentTimeMillis()-startTime));
        // 数据再次组合的开始时间
        startTime = System.currentTimeMillis();
        if(values.size()==0){
            return null;
        }
        SimpleFeatureCollection sc = FeaureUtil.creatSimpleFeatureByFeilds("polygons",
                fields, values);
        cs = FeaureUtil.creatFeatureSourceByCollection(sc);
        //System.out.println("反转--再次组装的时间输出:"+(System.currentTimeMillis()-startTime));
    } catch (Exception e) {
        //e.printStackTrace();
        return cs;
    }
    return cs;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haokan_Jia

你的鼓励就是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值