- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 JTS Geometry 对象数组,需要将其放入形状文件中。我还有一些其他属性需要放入 DBase 文件中。我还需要索引空间对象,并根据需要创建投影文件。有没有办法使用 JTS/GeoTools 来做到这一点。我尝试了 ShapeFileWriter 但这似乎还不够(例如没有 dbf 支持)。
public Shape(String shpFileName, String shxFileName) throws FileNotFoundException {
RandomAccessFile shpFile = new RandomAccessFile(shpFileName, "rw");
this.shpChannel = shpFile.getChannel();
RandomAccessFile shxFile = new RandomAccessFile(shxFileName, "rw");
this.shxChannel = shxFile.getChannel();
}
public void createShapeFile(GeometryCollection geometries, ShapeType shapeType) throws IOException {
ShapefileWriter writer = new ShapefileWriter(this.shpChannel, this.shxChannel);
writer.write(geometries, shapeType);
writer.close();
}
最佳答案
您无法写出一组几何图形并获取 DBF 文件(因为没有可放入其中的属性)。您需要创建一个FeatureCollection,然后将其传递给ShapeFileDatastore。
您将需要类似的东西:
public boolean writeFeatures(
FeatureCollection<SimpleFeatureType, SimpleFeature> features) {
if (shpDataStore == null) {
throw new IllegalStateException(
"Datastore can not be null when writing");
}
SimpleFeatureType schema = features.getSchema();
GeometryDescriptor geom = schema
.getGeometryDescriptor();
try {
/*
* Write the features to the shapefile
*/
Transaction transaction = new DefaultTransaction(
"create");
String typeName = shpDataStore.getTypeNames()[0];
SimpleFeatureSource featureSource = shpDataStore
.getFeatureSource(typeName);
/*
* The Shapefile format has a couple limitations: - "the_geom" is always
* first, and used for the geometry attribute name - "the_geom" must be of
* type Point, MultiPoint, MuiltiLineString, MultiPolygon - Attribute
* names are limited in length - Not all data types are supported (example
* Timestamp represented as Date)
*
* Because of this we have to rename the geometry element and then rebuild
* the features to make sure that it is the first attribute.
*/
List<AttributeDescriptor> attributes = schema
.getAttributeDescriptors();
GeometryType geomType = null;
List<AttributeDescriptor> attribs = new ArrayList<AttributeDescriptor>();
for (AttributeDescriptor attrib : attributes) {
AttributeType type = attrib.getType();
if (type instanceof GeometryType) {
geomType = (GeometryType) type;
} else {
attribs.add(attrib);
}
}
GeometryTypeImpl gt = new GeometryTypeImpl(
new NameImpl("the_geom"), geomType.getBinding(),
geomType.getCoordinateReferenceSystem(),
geomType.isIdentified(), geomType.isAbstract(),
geomType.getRestrictions(), geomType.getSuper(),
geomType.getDescription());
GeometryDescriptor geomDesc = new GeometryDescriptorImpl(
gt, new NameImpl("the_geom"),
geom.getMinOccurs(), geom.getMaxOccurs(),
geom.isNillable(), geom.getDefaultValue());
attribs.add(0, geomDesc);
SimpleFeatureType shpType = new SimpleFeatureTypeImpl(
schema.getName(), attribs, geomDesc,
schema.isAbstract(), schema.getRestrictions(),
schema.getSuper(), schema.getDescription());
shpDataStore.createSchema(shpType);
if (featureSource instanceof SimpleFeatureStore) {
SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource;
List<SimpleFeature> feats = new ArrayList<SimpleFeature>();
FeatureIterator<SimpleFeature> features2 = features
.features();
while (features2.hasNext()) {
SimpleFeature f = features2.next();
SimpleFeature reType = SimpleFeatureBuilder
.build(shpType, f.getAttributes(), "");
feats.add(reType);
}
features2.close();
SimpleFeatureCollection collection = new ListFeatureCollection(
shpType, feats);
featureStore.setTransaction(transaction);
try {
List<FeatureId> ids = featureStore
.addFeatures(collection);
transaction.commit();
} catch (Exception problem) {
problem.printStackTrace();
transaction.rollback();
} finally {
transaction.close();
}
shpDataStore.dispose();
return true;
} else {
shpDataStore.dispose();
System.err.println("ShapefileStore not writable");
return false;
}
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
https://github.com/ianturton/geotools-cookbook/tree/master/modules/output/src/main/java/org/ianturton/cookbook/output 有一个完整的工作示例(包括整理依赖关系的pom文件)
关于java - 需要帮助将 JTS Geometry 对象数组转换为形状文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26935862/
我有一个 java.lang.String 格式的几何图形。我的意思是我直接从 DB 中取出它作为 java.lang.String 存储在变量中。我想以某种方式将它转换为 jts Geometry
我有一个类型为 (com.vividsolutions.jts.geom.Geometry) 的几何对象。它目前处于纬度、经度形式,我想翻转坐标,以便它的经度纬度,以便我可以将它以 GeoJSON 格
如果我在 JTS(或一般某种开放折线)中有一个 linestring ,其方向由起点定义,是否有一些智能方法可以判断与闭合 的交叉点Polygon linestring 是否“进入”多边形或退出多边形
我最近发现在处理项目中的地理类型时使用 JTS 库的潜力。我使用 hibernate 作为我的 ORM(包括 hibernate 空间)。 在知道 JTS 的存在之前,我将坐标存储在一个名为 LatL
在question I asked about ways to gather pixel data from an image中,有人向我推荐了 Java Topology Suite。 考虑到我是一
我有一组几何对象。现在我想计算整个集合中的最小边界矩形。我正在使用 Java 拓扑套件,但我不知道该怎么做? 最佳答案 看看http://tsusiatsoftware.net/jts/javadoc
我有一个大多边形,我想找到与该多边形相交的要素,但由于多边形太大,我遇到超时异常。 我试图研究 JTS 方法,但不知道如何使用它。 final List coordinates = List.of(n
我正在尝试将 1000 米的缓冲区应用于 JTS Topology Suite 中的多边形形状。我已经确定了执行此操作的方法(请参阅下面的链接),但我不确定缓冲区方法中距离参数的单位是什么。 JTS
JTS.orthodromicDistance(new Cooperative(0,0), new Cooperative(180,0), DefaultGeographicCRS.WGS84) *
我正在使用 JTS(Java 拓扑套件)库进行测试,看看是否可以简化段列表。事实上,我对这个库知之甚少,而且我是一个编程新手,所以我不知道我想要实现的目标是否可能。 我想要的是,转换如下所示的 MUL
以下是我对 JTA/JTS 处理事务超时问题的理解。但我找不到我的文件或 Material 来支持我的理解。我的理解对吗?你知道有什么 Material 是指这个问题吗? Application Se
我编写代码来连接(合并)几何体。我将它包装成 Java8 流 Collector .在它里面它只使用 Geometry#union联合几何体: geometries[0] = geometries[0
在 JTS 中有什么方法可以查明 LineString 是否与自身相交?就像下图一样,我怎样才能找到这条线是否与自己相交?我通过给出它的 4 个边的坐标来创建这条线。 提前致谢。 最佳答案 任何线都不
我有多边形形状,我想将它转换为 MultiLineString。请注意,方向通常是不同的:从点、坐标、线等使用 GeometryFactory 构建多边形。我开始考虑 GeometryTransfor
我尝试使用 java 对图像进行矢量化,即带有 JAI 的 geotools。 代码最少,在 intelliJ 中工作得很好 InputStream stringAsStream = new Byte
我已经在一个平面内加载了大量点,我需要从给定点开始绘制一个圆/椭圆,半径距离以米为单位,然后检查圆内有哪些点。 我已经使用 within() 方法对多边形完成了此操作,但我找不到无需指定多边形周围的每
我希望得到 CGAL 的等价物(在 C++ 中)——我想要多边形的凸分区或至少是三角剖分。它还必须是免费的。之前的一个问题建议JTS , 但它似乎没有这些功能。 最佳答案 JTS支持delaunay三
我们可以像这样使用坐标列表创建一个 LineString: Geometry g1 = new GeometryFactory().createLineString(coordinates)
我正在尝试将 hibernate 空间与 JPA 集成以进行地理搜索。我一直在引用 tutorial在官方网站上(我与hibernatespatial无关)。 遗憾的是,本教程并未介绍如何从纬度/经度
取无效多边形POLYGON((0 100, 100 100, 0 0, 100 0, 0 100)) - 一个带有未声明交点的鸡蛋计时器形状 许多指令说 JTS 可以使用 buffer 方法创建一个有
我是一名优秀的程序员,十分优秀!