前言
使用Android Runtime SDK For Java读写ShapeFile文件发现没有可以直接调用的接口去实现功能,所以就用GeoTools开源的项目进行ShapeFile文件的读取,但是发现读出来的图形是ArcGIS无法识别的。所以就要求我将GeoTools读出的图形转换成ArcGis能够识别的图形并存储起来。
过程简述
- 读取ShapeFile文件
- 将GeoTools获取的Geometry转换为WKT格式
- 将WKT转换成ArcGIS能够识别的Json格式
- 通过ArcGIS API中方法读取Json转换为可识别的Geometry
WKT -> Json
首先我们要知道图形分为:POINT、MULTIPOINT、LINESTRING、MULTILINESTRING、POLYGON、MULTIPOLYGON这几种类型。对应的ArcGis对于不同类型所需的JSON格式也不相同。
首先我们先构造这几种类型的实体类:
PointObject类:
package com.wkt;
import java.util.HashMap;
public class PointObject {
private double x;
private double y;
private HashMap<String, Integer> spatialReference;
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
public HashMap<String, Integer> getSpatialReference() {
return spatialReference;
}
public void setSpatialReference(HashMap<String, Integer> spatialReference) {
this.spatialReference = spatialReference;
}
}
MultiIPointObject类:
package com.wkt;
import java.util.HashMap;
import java.util.List;
public class MultiIPointObject {
private List<Double[]> points;
private HashMap<String, Integer> spatialReference;
public List<Double[]> getPoints() {
return points;
}
public void setPoints(List<Double[]> points) {
this.points = points;
}
public HashMap<String, Integer> getSpatialReference() {
return spatialReference;
}
public void setSpatialReference(HashMap<String, Integer> spatialReference) {
this.spatialReference = spatialReference;
}
}
LineStringObject类:
package com.wkt;
import java.util.HashMap;
import java.util.List;
public class LineStringObject {
private List<List<Double[]>> paths;
private HashMap<String, Integer> spatialReference;
public List<List<Double[]>&g