<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