许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  esri geometry-api学习:几何对象API使用指南

esri geometry-api学习:几何对象API使用指南

阅读数 15
点赞 0
article_banner
        <dependency>
            <groupId>com.esri.geometry</groupId>
            <artifactId>esri-geometry-api</artifactId>
            <version>2.2.3</version>
        </dependency>

1、2个geojson是否相交

import com.alibaba.fastjson.JSONObject;
import com.esri.core.geometry.*;
import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.geojson.feature.FeatureJSON;
import org.opengis.feature.simple.SimpleFeature;

import java.io.File;
import java.io.StringWriter;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

    		File[] files = new File("E:\\test").listFiles();
		for (File shapeFile : files) {
			if (shapeFile.getName().endsWith(".shp")) {
				// 使用GeoTools读取ShapeFile文件
				ShapefileDataStore store = new ShapefileDataStore(shapeFile.toURI().toURL());
				//设置编码
				Charset charset = Charset.forName("GBK");
				store.setCharset(charset);
				SimpleFeatureSource sfSource = store.getFeatureSource();
				SimpleFeatureIterator sfIter = sfSource.getFeatures().features();
				// 从ShapeFile文件中遍历每一个Feature,然后将Feature转为GeoJSON字符串
				List<String> ls = new ArrayList<>();
				while (sfIter.hasNext()) {
					SimpleFeature feature = sfIter.next();
					// Feature转GeoJSON
					FeatureJSON fjson = new FeatureJSON();
					StringWriter writer = new StringWriter();
					fjson.writeFeature(feature, writer);
					String sjson = writer.toString();
					JSONObject featureStr = JSONObject.parseObject(sjson);
					String geojson = featureStr.get("geometry").toString();
					ls.add(geojson);
					MapGeometry mapGeometry = GeometryEngine.geoJsonToGeometry(geojson,
							WktImportFlags.wktImportDefaults, com.esri.core.geometry.Geometry.Type.Polygon);
					com.esri.core.geometry.Geometry polygon = mapGeometry.getGeometry();
//					double l = GeometryEngine.distance(polygon,new Point(108.41, 30.81),SpatialReference.create(4326));
					boolean b = isWithin(108.49, 30.77,polygon,0.2);
					System.out.println("l = " + b);
				}
				System.out.println("数据导入完成,共耗时" + (System.currentTimeMillis() - start) + "ms");
			}
		}

	// Disjoint	判断两个图形间是否没有相同点
	public static boolean isWithin(double lon, double lat, com.esri.core.geometry.Geometry p, double dis) throws Exception {//dis=20000大约0.2度
		String geojson = "{\"type\":\"Polygon\",\"coordinates\":[[["+(lon-dis)+","+(lat-dis)+"],["+(lon+dis)+","+(lat+dis)+"],[" +
				""+(lon-dis)+","+(lat+dis)+"],["+(lon+dis)+","+(lat-dis)+"]]]}";
		MapGeometry mapGeometry = GeometryEngine.geoJsonToGeometry(geojson,
				WktImportFlags.wktImportDefaults, com.esri.core.geometry.Geometry.Type.Polygon);
		return GeometryEngine.disjoint(mapGeometry.getGeometry(), p, SpatialReference.create(4326));
	}


相等(Equals):几何形状拓扑上相等。
脱节(Disjoint):几何形状没有共有的点。
相交(Intersects):几何形状至少有一个共有点(区别于脱节)
接触(Touches):几何形状有至少一个公共的边界点,但是没有内部点。
交叉(Crosses):几何形状共享一些但不是所有的内部点。
内含(Within):几何形状A的线都在几何形状B内部。
包含(Contains):几何形状B的线都在几何形状A内部(区别于内含)
重叠(Overlaps):几何形状共享一部分但不是所有的公共点,而且相交处有他们自己相同的区域。

缓冲区分析(Buffer)包含所有的点在一个指定距离内的多边形和多多边形
凸壳分析(ConvexHull)包含几何形体的所有点的最小凸壳多边形(外包多边形)
交叉分析(Intersection)交叉操作就是多边形AB中所有共同点的集合。
联合分析(Union)AB的联合操作就是AB所有点的集合。
差异分析(Difference)AB形状的差异分析就是A里有B里没有的所有点的集合。
对称差异分析(SymDifference)AB形状的对称差异分析就是位于A中或者B中但不同时在AB中的所有点的集合

参考:https://blog. csdn .net/objectively/article/details/35219605?utm_source=blogxgwz3


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空