【发布时间】:2020-06-18 13:07:16
【问题描述】:
我构建了一个非常简单的地图图块服务器,它提供预渲染的栅格化地图图块,并与传单一起使用:
[HttpGet]
public IActionResult GetTile(int z, int x, int y)
{
var mainFolder = "C:\\maptiles\\";
var image = System.IO.File.OpenRead(mainFolder + string.Format("{0}\\{1}\\{2}.png", z, x, y));
return File(image, "image/png");
}
我现在需要创建一个单独的端点,它将基于 geojson 文件而不是预渲染的位图将动态生成的位图图块发送回客户端。像这样的:
[HttpGet]
public IActionResult GetGeoJsonTile(int z, int x, int y)
{
var geoJsonFilePath = "C:\\geojsontiles\\coverage-area.geojson";
var geoJsonObj = JsonConvert.DeserializeObject(File.ReadAllText(geoJsonFilePath));
Byte[] imageBytes;
//RASTERIZE ENTIRE GEOJSON TO BITMAP HERE
//...
//CROP AND ZOOM RASTERIZED BITMAP TO FIT x,y,z PARAMS
//...
return File(imageBytes, "image/png");
}
光栅化部分应该相当简单(我认为)。但我挂断的部分是裁剪和缩放。我知道 geojson 文件本质上是一个带有纬度/经度坐标参考的矢量图。我不明白这些纬度/经度坐标如何转换为基于用户与客户端地图交互输入的 x、y、z 坐标。有没有一种方法可以将 geojson 文件中的纬度/经度信息与 x、y、z 输入结合使用来确定缩放的距离以及在哪里裁剪输出的光栅化图像?
另外,我确实意识到传单(和其他客户端)直接支持 geojson 文件。但这不是我的选择。我们使用的 geojson 文件非常大且复杂,在客户端机器上使用时会导致严重的滞后问题。
【问题讨论】:
-
您找到什么好的解决方案了吗?我现在也有同样的问题
标签: c# image-processing geojson