<dependency>
<groupId>com.esri.geometry</groupId>
<artifactId>esri-geometry-api</artifactId>
<version>2.2.3</version>
</dependency>
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
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删