åæåç»ï¼ä¹¦æ¥ä¸ä¸åï¼ââjava读åshapefileä¸ç¨arcgis for jså±ç¤ºââ
javaæä¹è¯»åshapefileå¢ï¼
shapefileæ¯esriå ¬å¸æå æåºæ¥çï¼é£ä¹arcgisåºè¯¥æ¯æç¸å ³çç±»åºçå§ï¼å¥½åæ¾ä¸å°ï¼æé®è¿æ移å¨ç«¯çåäºï¼arcgis for androidç¡®æå¤çshapefileçç±»åºï¼å¤çèµ·æ¥æå¦åæãä½æ¯ï¼å¨WEBç³»ç»ï¼æå¡å¨ç«¯ä»shapefile读åºæ°æ®ï¼æç»æ¯è¦å¨å端æµè§å¨ä¸å±ç¤ºï¼åæ们ç®åå¨å»ºç项ç®ï¼å°±æ¯è¦ç¨arcgis for jsæ¥å±ç¤ºè¿äºæ°æ®ï¼èå®åç³»ç»ç±»ä¼¼CS项ç®ï¼æå¾å¤§çä¸åãæ大çä¸åï¼WEBç³»ç»ä¸ï¼æ°æ®è¦ä»¥JSONçå½¢å¼ç»å端ï¼è¿æ ·æ好å¤çãarcgis for androidï¼æ²¡æ¥è§¦è¿ï¼å¿åæ¬çï¼ä¼ä¸ä¼å¾åºå¤§ï¼æ没æç¨ï¼ä¸æ¸ æ¥ï¼ææç¹å®³æï¼æ¬è½å°æ¾å¼äºã
arcgis for javaçSDKåºè¯¥æ¯arcgis engineå§ãææ¶é´è¦äºè§£ä¸ã
å¨javaä¸çéï¼å¤ç空é´ä¿¡æ¯ï¼ææµè¡çä¹è®¸å°±æ¯ç¨ââGeoToolsââäºï¼ä¸ä¸ªå¼æºçJAVAå¤ç空é´ä¿¡æ¯ç±»åºã
ç½ä¸ä¾åå¾å¤ï¼ä½å¤§åå°å¼ãå ¶å®è¯»åºshpçæ°æ®ä¸ç¹é½ä¸é¾ãé¾å°±é¾å¨ï¼geotools读åºæ¥çæ°æ®å½¢å¼ï¼å¦æ转æjsonçè¯ï¼æ¯GeoJsonï¼èä¸æ¯EsriJsonï¼å端æ³ç¨arcgis for jsç»å¶ï¼å¾é¾ãæ以ï¼è¯»ååºæ¥åï¼è¦è½¬æEsriJsonãå¦ä½è½¬æ¢ï¼æ¯å¦ä¸ä¸ªè¯¾é¢ãç°å¨ï¼å 读åºæ¥å说ã
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.data.shapefile.dbf.DbaseFileHeader;
import org.geotools.data.shapefile.dbf.DbaseFileReader;
import org.geotools.data.shapefile.files.ShpFiles;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.geojson.feature.FeatureJSON;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.opengis.feature.Property;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.TransformException;
import java.io.*;
import java.nio.charset.Charset;
import java.util.*;
/*
shapefileæä½ç±»
*/
public class ShapefileHelper {
public static Object read(String path) throws IOException {
/*
åæ°pathå°±æ¯shpæ件çå®æ´è·¯å¾ï¼å¦ï¼E:\\è æ¡ä¼èµæºæ¸
æ¥\\è°æ¥å¾æ.shp
ç³»ç»ä¼èªå¨æ£æ¥åä¸ä¸ªç®å½ä¸æ没æå
¶ä»ç¸å
³æ件ï¼æçè¯ä¼ä¸å¹¶è¯»åºï¼
ç¸å
³æ件çè·¯å¾æ é¡»ç»åº
.shp åå¨å°çå½¢ç¶åä½ç½®ä¿¡æ¯
.dbf åå¨å±æ§ä¿¡æ¯
.shx ç´¢å¼æ件
.prj åæ ç³»
.cpg å符ç¼ç ï¼å¦UTF-8
读ååºæ¥çç»æç±»å为 List<Map<String, Object>>
*/
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
File file = getFile(path);
if (file == null) {
return list;
}
String charset = getCharSet(path);
FileDataStore store = FileDataStoreFinder.getDataStore(file);
((ShapefileDataStore)store).setCharset(Charset.forName(charset));
SimpleFeatureSource featureSource = store.getFeatureSource();
SimpleFeatureCollection collection = featureSource.getFeatures();
SimpleFeatureIterator features = collection.features();
while (features.hasNext()) {
Map<String, Object> item = new HashMap<String, Object>();
SimpleFeature f = features.next();
Collection<Property> p = f.getProperties();
Iterator<Property> it = p.iterator();
while (it.hasNext()) {
Property pro = it.next();
String field = pro.getName().toString();
field = field.equals("the_geom") ? "wkt" : field;
String value = pro.getValue().toString();
item.put(field, value);
}
list.add(item);
}
return list;
}
private static File getFile(String path){
File file = new File(path);
if (file == null) {
System.out.println("æ¾ä¸å°è·¯å¾ï¼" + path);
}
return file;
}
/*
è·åshapefileå符ç¼ç
å¦æåå¨.cpgæ件ï¼åä»ä¸è¯»åï¼å¦åé»è®¤ä¸ºUTF-8
*/
private static String getCharSet(String path){
String charset = "UTF-8";
int p = path.lastIndexOf(".");
String cpg = path.substring(0,p) + ".cpg";
File file = getFile(cpg);
if(file != null) {
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile(cpg, "r");
charset = raf.readLine();
raf.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return charset;
}
}
pom.xml
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-shapefile</artifactId>
<version>23.0</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geojson</artifactId>
<version>23.0</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-epsg-hsql</artifactId>
<version>23.0</version>
</dependency>
æµè¯ä¸ä¸
@Test
void readSha() throws IOException {
List<Map<String, Object>> list = (List<Map<String, Object>>) ShapefileHelper.read("E:\\è æ¡ä¼èµæºæ¸
æ¥\\导åºææ20200420093045-2\\导åºææ20200420093045\\å¾æç¢é\\è°æ¥å¾æ.shp");
Console.print(list.size());
}
ä½æ¯ï¼ä»shapefileé读åºå 容ååè½»æ¾ï¼ä½è¿åªæ¯ç¬¬ä¸æ¥ï¼è¦æ³å¨å端çarcgis for jsä¸å±ç¤ºåºæ¥ï¼èéªæååå¼å§ã