Ant*_*nte 4 java gis coordinates hexagonal-tiles geotools
我正在尝试创建规则的六边形多边形,但是当在地图上可视化时,它们会垂直拉伸。
我就是这样做的:
List<Geometry> hexagons = new ArrayList<>();
CoordinateReferenceSystem sourceCRS = DefaultGeographicCRS.WGS84;
ReferencedEnvelope gridBounds = new ReferencedEnvelope(box[0], box[2], box[1], box[3], sourceCRS);
double sideLen = 0.1;
GridFeatureBuilder builder = new DefaultGridFeatureBuilder();
SimpleFeatureSource grid = Hexagons.createGrid(gridBounds, sideLen, HexagonOrientation.FLAT, builder);
try{
SimpleFeatureCollection collection = grid.getFeatures();
FeatureIterator iterator = collection.features();
while (iterator.hasNext()){
Feature feature = iterator.next();
SimpleFeature sFeature = (SimpleFeature) feature;
Geometry geometry = (Geometry) sFeature.getAttribute(0);
hexagons.add(geometry);
}
} catch(Exception e){
e.printStackTrace();
}
return hexagons;
Run Code Online (Sandbox Code Playgroud)

就是它在地图上的样子。我尝试将方向从“平面”更改为“角度”,但这并没有解决问题。
你已经被地球是圆的而不是平的所吸引了。
您要求六边形以纬度/经度或 EPSG:4326 为单位,如果您在该投影中显示它们,那么它们看起来会很好:
但是,当您将地图重新投影到伪墨卡托 (EPSG:3857) 时,它们(以及地图的其余部分)会被拉伸,越往北走,情况就越糟糕。
如果您想要在拉伸地图上未拉伸的六边形,那么您需要在该投影中生成它们,如下所示:
List<Geometry> hexagons = new ArrayList<>();
CoordinateReferenceSystem sourceCRS = DefaultGeographicCRS.WGS84;
ReferencedEnvelope
gridBounds = new ReferencedEnvelope(-5,5,50,60, sourceCRS);
ReferencedEnvelope nGridBounds = gridBounds.transform(CRS.decode("EPSG:3857"),true);
double sideLen = 100000.0;
GridFeatureBuilder builder = new DefaultGridFeatureBuilder();
SimpleFeatureSource
grid = Hexagons.createGrid(nGridBounds, sideLen, HexagonOrientation.FLAT, builder);
Run Code Online (Sandbox Code Playgroud)
我将边界框更改为 EPSG:3857,并将边长更改为 100Km。
一般来说,EPSG:3857 是一个不好的投影,无法进行任何分析(或除网络地图之外的任何内容),因此您可能需要为您的研究领域选择更好的投影。
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |