- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
例如,如果您有一个像这样的带有多边形的 GeoJSON 文件(用于测试的简单文件)
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-4.658203125,
41.343824581185686
],
[
-5.6689453125,
39.13006024213511
],
[
-1.9335937499999998,
39.16414104768742
],
[
-1.3623046875,
41.21172151054787
],
[
-4.658203125,
41.343824581185686
]
]
]
}
}
]
}
要点:
Geometry point2 = new WKTReader().read("POINT (-3.2958984375 40.44694705960048)");
并且您想在程序中加载 geoJSON 文件以测试此多边形是否包含点,您如何使用 JTS 在 Java 中完成?
其他选项可以将 GeoTools 与 GeoJson 一起使用插件,但我无法解析 GeoJson 文件
我尝试过的
使用像 this 这样的 GEOTOOLS
String content = new String(Files.readAllBytes(Paths.get("file.geojson")), "UTF-8");
GeometryJSON gjson = new GeometryJSON();
Reader reader = new StringReader(content);
Polygon p = gjson.readPolygon(reader);
System.out.println("polygon: " + p);
这里的问题是多边形 p 只包含 geojson 文件的最后一个多边形。如果这个文件有很多多边形,我应该如何解析它?
像this一样使用JTS2GEOJSON
String content = new String(Files.readAllBytes(Paths.get("file.geojson")), "UTF-8");
System.out.println("content: " + content);
GeoJSONReader reader1 = new GeoJSONReader();
Geometry geometry = reader1.read(content);
此代码失败是这一行:
Geometry geometry = reader1.read(content);
出现此错误:
Exception in thread "main" java.lang.UnsupportedOperationException
at org.wololo.jts2geojson.GeoJSONReader.read(GeoJSONReader.java:51)
at org.wololo.jts2geojson.GeoJSONReader.read(GeoJSONReader.java:21)
at org.wololo.jts2geojson.GeoJSONReader.read(GeoJSONReader.java:16)
此错误是由于我正在尝试从 GeoJson 文件中读取 FeatureCollections。如果我尝试使用这个简单的字符串,它会起作用:
String content = "{\n" +
" \"type\": \"Polygon\",\n" +
" \"coordinates\": [\n" +
" [\n" +
" [\n" +
" -4.141845703125,\n" +
" 40.9218144123785\n" +
" ],\n" +
" [\n" +
" -4.603271484375,\n" +
" 40.002371935876475\n" +
" ],\n" +
" [\n" +
" -3.5595703125,\n" +
" 39.757879992021756\n" +
" ],\n" +
" [\n" +
" -2.548828125,\n" +
" 40.43858586704331\n" +
" ],\n" +
" [\n" +
" -3.2080078125,\n" +
" 41.12074559016745\n" +
" ],\n" +
" [\n" +
" -4.141845703125,\n" +
" 40.9218144123785\n" +
" ]\n" +
" ]\n" +
" ]\n" +
" }";
最佳答案
如果您使用 GeoTools那么你需要开始考虑 DataStores和 FeatureCollections .有很多内置智能(大部分使用 JTS)来处理 filtering等等,如果出现潜在问题,这可以为您节省很多。
File inFile = new File("/home/ian/Data/states/states.geojson");
Map<String, Object> params = new HashMap<>();
params.put(GeoJSONDataStoreFactory.URLP.key, URLs.fileToUrl(inFile));
DataStore newDataStore = DataStoreFinder.getDataStore(params);
String pt = "POINT (-107 42)";
FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2();
SimpleFeatureSource featureSource = newDataStore.getFeatureSource(newDataStore.getTypeNames()[0]);
Filter f = ff.contains(ff.property(featureSource.getSchema().getGeometryDescriptor().getLocalName()),
ff.literal(pt));
SimpleFeatureCollection collection = featureSource.getFeatures(f);
if (collection.size() > 0) {
try (SimpleFeatureIterator itr = collection.features()) {
while (itr.hasNext()) {
System.out.println(itr.next());
}
}
}
这将需要在您的 pom.xml
中包含以下内容:
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geojsondatastore</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-shapefile</artifactId>
<version>${geotools.version}</version>
</dependency>
关于java - 使用 Java Topology Suite 或 GeoTools 解析 GeoJSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53957417/
我正在使用 Groovy 进行一个项目,我想采用一个员工数组,这样在数组中没有经理跟随他们的下属。原因是我需要将人员添加到数据库中,我不希望分两次完成。 所以,我基本上有: 12
要缓存的数据: 100 Gb 数据 大小为 500-5000 字节的对象 平均每分钟更新/插入 1000 个对象(峰值 5000) 需要对生产和测试中的 Coherence 拓扑提出建议(与备份一起分
在所有边都处于错误方向的图上反转拓扑排序的结果是否会产生有效的拓扑顺序,就好像边在排序之前被反转一样? a -> b a -> c b -> d c -> d 可以给出 a b c d 的拓扑排序。反
使用JTS,如何找到多边形边界上距外部点最近的点? 最佳答案 查看 DistanceOp 。它返回一个坐标数组: 坐标[] pts = DistanceOp.closestPoints(poly, O
我正在尝试使用充当 Kafka 消费者的 Storm 喷口将我的数据从 Kafka 主题发送到 HBase,并将数据发送到 HBase 我在 Storm 拓扑中面临异常.... java.lang.R
我已经配置了我的机器 zookeeper、nimbus、supervisor 正常运行并且我的拓扑在 LocalCluster 中工作 LocalCluster cluster = new Local
我正在构建一个 REST API,但每次加载我的网站时,我都会收到 MongoError:拓扑已损坏。有人可以帮我解决这个问题吗?我感觉异步运行有问题。 const client = new Mong
我使用一些带有 zb 堆栈的 xbee (s2) 模块进行网状网络评估。因此,必须创建多跳环境。问题是,固件自己处理关联,并且没有像 api 提供的那样更深入地了解堆栈。为了强制数据的路径,而不干扰路
我有一个在 Node.js 中使用 Restify 和 Mongoose 构建的 REST 服务,以及一个包含大约 30.000 个常规大小文档的集合的 mongoDB。我的 Node 服务通过 pm
当我尝试创建时出现此错误: Error (E_UNKNOWN) :: Encountered an unexpected error MongoError: topology was destroye
我正在使用 storm jar 类将拓扑提交给 `nimbus'。它在本地工作正常但在远程集群上它说它无法加载主类。下面是错误 stderr: SLF4J: Class path contains m
当我尝试创建此错误时: Error (E_UNKNOWN) :: Encountered an unexpected error MongoError: topology was destroyed
我有一个内置在 node.js 中的 REST 服务,带有 Restify 和 Mongoose,还有一个 mongoDB,其中包含大约 30.000 个常规大小的文档。我的 Node 服务通过 pm
我正在寻找一种方法来设置“cassandra-topology.properties”的路径,以便 Cassandra 可以从给定路径获取此文件。有什么办法可以做到这一点吗? 谢谢,巴蒂亚 最佳答案
在尝试提交 Storm 拓扑时, ./storm jar /home/winoria1/Desktop/stormtopology.jar com.storm.StormTopology 我收到以下错
Apache Storm 如何设置新拓扑和存在一次的日志级别? 在java中我写道: import org.slf4j.Logger; import org.slf4j.LoggerFactory;
在同一台计算机上有两个节点的本地(测试)设置中(使用端口范围 47500..47501 的静态 IP 配置),“第二个”节点将不会加入集群;它发出 TcpDiscoveryJoinRequestMes
我是一名前端开发人员,试图在新的 Next 项目中拓展自己的视野,第一次学习 Node、Mongo 和 GraphQL 的服务器端。 Apollo 对我来说是最简单的入门方式,因为我已经在之前的项目中
我已将我的 MongoDB 数据库配置为单节点副本集。我可以通过 api 访问它(向它写入数据),也可以从 shell 访问它: rs0:PRIMARY> rs.status() { "set
我目前在 Windows 机器上使用 Netbeans 开发拓扑。当我以本地模式部署时: LocalCluster 集群 = new LocalCluster(); cluster.submitTop
我是一名优秀的程序员,十分优秀!