- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想根据自然地球数据计算从一个点到 shp 文件 (ports.shp) 的最近距离。
例如,我正在加载文件的功能:
...
String filename = "10m_cultural/ne_10m_ports.shp";
...
public static void Calcs(String filename)
throws IOException, NoSuchAuthorityCodeException, FactoryException, TransformException {
HashMap<String, Object> params = new HashMap<>();
params.put("url", DataUtilities.fileToURL(new File(filename)));
DataStore ds = DataStoreFinder.getDataStore(params);
String name = ds.getTypeNames()[0];
SimpleFeatureSource source = ds.getFeatureSource(name);
SimpleFeatureCollection features = source.getFeatures();
}
现在,我想要计算距离的点是:
GeometryFactory gf = JTSFactoryFinder.getGeometryFactory();
Point p = gf.createPoint(new Coordinate(43, 18));
我知道要计算距离我会这样做:
CoordinateReferenceSystem crs = CRS.decode("EPSG:4326");
Point start = gf.createPoint(new Coordinate(43, 18));
Point dest = gf.createPoint(new Coordinate(?????));
GeodeticCalculator gc = new GeodeticCalculator(crs);
gc.setStartingPosition(JTS.toDirectPosition(start.getCoordinate(), crs));
gc.setDestinationPosition(JTS.toDirectPosition(dest.getCoordinate(), crs));
double distance = gc.getOrthodromicDistance();
但我不知道如何找到目的地点的坐标(ports.shp文件):
Point dest = gf.createPoint(新坐标(??????));
我有加载文件的功能
,但它没有任何getCooperatives()
方法。
另外,正如我所看到的ports.shp
由许多POINT
几何图形组成。我是否必须以某种方式计算引用点的每个点,然后选择最近的点?
最佳答案
Feature 有一个 getDefaultGeometry
方法,可以为您提供所需的点。然后就可以得到该点的坐标。
编辑
您的问题是单位不匹配,您将 MinDist
设置为边界框的宽度(以度为单位,因此约为 360),但将其与以米为单位的距离进行比较(因此约为 7800000),因此您从未找到足够近的点来保存。
我开始尝试通过限制初始搜索范围来提高搜索效率,但即使使用填充的地点数据集,它也足够快,我无法真正判断它是否有帮助。
final double MAX_SEARCH_DISTANCE = Math.max(index.getBounds().getWidth(), index.getBounds().getHeight());
double searchDist = 0.01;
while (searchDist < MAX_SEARCH_DISTANCE) {
// start point (user input)
Coordinate coordinate = p.getCoordinate();
ReferencedEnvelope search = new ReferencedEnvelope(new Envelope(coordinate),
index.getSchema().getCoordinateReferenceSystem());
search.expandBy(searchDist);
BBOX bbox = ff.bbox(ff.property(index.getSchema().getGeometryDescriptor().getName()), (BoundingBox) search);
SimpleFeatureCollection candidates = index.subCollection(bbox);
double minDist = Double.POSITIVE_INFINITY; // can't use
// MAX_Search_dist here
// as it is degrees and
// dists are meters
Coordinate minDistPoint = null;
double dist = 0;
Point dest = null;
SimpleFeatureIterator itr = candidates.features();
CoordinateReferenceSystem crs = DefaultGeographicCRS.WGS84;
try {
SimpleFeature feature = null;
while (itr.hasNext()) {
feature = itr.next();
// destination point
dest = (Point) feature.getDefaultGeometry();
GeodeticCalculator gc = new GeodeticCalculator(crs);
gc.setStartingPosition(JTS.toDirectPosition(p.getCoordinate(), crs));
gc.setDestinationPosition(JTS.toDirectPosition(dest.getCoordinate(), crs));
// Calculate distance between points
dist = gc.getOrthodromicDistance();
// System.out.println(feature.getID()+": "+dist);
if (dist < minDist) {
minDist = dist;
minDistPoint = dest.getCoordinate();
lastMatched = feature;
}
}
} finally {
itr.close();
}
Point ret = null;
if (minDistPoint == null) {
searchDist *= 2.0;
System.out.println("repeat search");
} else {
ret = gf.createPoint(minDistPoint);
return ret;
}
}
return gf.createPoint(new Coordinate());
}
关于java - 从 shp 文件读取坐标并计算距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45189672/
here中提出的问题,已解决,但不知何故它不适用于不同的 shp 文件。知道为什么吗?我一直在尝试使用 Coloring the states according to a given variabl
我想根据自然地球数据计算从一个点到 shp 文件 (ports.shp) 的最近距离。 例如,我正在加载文件的功能: ... String filename = "10m_cultural/ne_10
我有兴趣从 ESRI .shp 文件中收集信息。特别是折线要素类的 .shp 文件。 当我打开一个要素类的 .dbf 时,我得到了我所期望的:一个可以在 excel 中打开并包含来自要素类表的信息的表
在 R 中,我需要帮助来尝试复制教程 here让我自己的自定义 SHP(Shapefile)文件或 map 成为交互式分区统计图... 该 map 是北爱尔兰小区域的 map 。可以查到here 。
我正在尝试将 SHP 文件放入我的 PostGIS 数据库中,但数据有点偏差。我认为这是因为我使用了错误的 SRID。 PRJ文件内容如下: GEOGCS["GCS_North_American_19
我正在尝试绘制此处可用的 *.shp 文件 ArcGis .看着 page我从哪里获取数据,我希望彩色区域看起来像这样: . 但是当我绘制它时,我得到了一些不同的东西(见下文)。特别是,看起来有些多边
我正在尝试加载 shapefile 并使用 basemap 绘制它,但每次尝试加载 shapefile basemap 都会引发错误,即使 .shp 文件位于我提供的文件夹中,它也无法查找 .shp
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我很难让我的数据框在传单中绘制。我有一个 shapefile 和一个 csv 合并在一起。生成的数据帧有几列,包括 long、lat 和“percent”。 我可以使用 ggplot 和以下代码绘制它
我正在使用 GeoDjango 中的形状文件。现在我正在尝试为加载到形状文件中并将其保存到数据库中的代码编写测试。形状文件当前的特征数为 64,118。我想将其减少到少数,以便测试可以快速加载并确认一
我创建了一个点图,并使用 python basemap 在其上覆盖了县边界。我有另一个 shapefile,它基于 IUCN 数据的物种分布图(species_13143)。我已将该形状文件叠加到之前
我有一个包含所有法语管理限制的五个文件包(可用 here)。 所有这五个文件 LIMITE_DEPARTEMENT.SHP/DBF/AVL/PRJ/SHX 都在文件夹/home/jonathan/R
我有一个 .shp 格式的文件,我需要它以编程方式将其转换为 Excel 电子表格。我想使用 PHP 或 JavaScript 执行此操作。 最佳答案 一旦我使用了小型 PHP 库 ShapeFile
给定一个 shp 文件,例如 Gadm e.g. US administrative divisions ,其中坐标引用系为纬度/经度,采用 WGS84 基准。 输入实际上可以是: 形状文件, ESR
我有一个包含海洋界限的 .shp 文件。但是,我没有绘制所有这些,而是只对 6 感兴趣。Geopandas 创建了类似数据框的东西(我们称之为“df”),就像 Pandas 一样。是否可以创建一个
谁能帮帮我?我正在尝试编写一个代码来读取数据文件夹中的所有文件。这些文件都有不同的扩展名:.shp、.dbf、.sbx、.mxd)我使用的是 Windows。谢谢。 我有: import os
我想将两个 .shp 文件转换成一个数据库,这样我就可以一起绘制 map 。 此外,有没有办法将 .shp 文件转换为 .csv 文件?我希望能够在 .csv 格式下个性化和添加一些对我来说更容易的数
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
介绍 我正在读取两个包含地理空间数据的文件,一个为 .shp,一个为 .csv(使用 options = c('X_POSSIBLE_NAMES=lat', 'Y_POSSIBLE_NAMES=lon
我有一个如下所示的形状文件。我使用在线转换器对其进行了转换。然后我得到这个文件的值如下 {"type":"Polygon","coordinates":[[[973154.7117999941,194
我是一名优秀的程序员,十分优秀!