GIS 像素和米在转化

当我们在用arcgis server 构建切片时,我们会发现在缓存生成的conf.xml中有这样的片段:

<TileOrigin xsi:type="typens:PointN">
	<X>-5123200</X>
	<Y>10002100</Y>
</TileOrigin>
<TileCols>512</TileCols>
<TileRows>512</TileRows>
<DPI>96</DPI>
<LODInfos xsi:type="typens:ArrayOFLODInfo">
	<LODInfo xsi:type="typens:LODInfo">
	<LevelID>0</LevelID>
	<Scale>125000000</Scale>
	<Resolution>33072.982812632297</Resolution>
</LODInfo>
<LODInfo xsi:type="typens:LODInfo">
	<LevelID>1</LevelID>
	<Scale>64000000</Scale>
	<Resolution>16933.367200067736</Resolution>
</LODInfo>
</LODInfos>

在上述片段中<LODInfo>代表了每一级切片的信息,<LevelID>代表切片的级数。

在这里,<Scale>代表比例尺。比例尺是表示图上距离比实地距离缩小的程度,也叫缩尺。公式为:比例尺=图上距离/实地距离。用数字的比例式或分数式表示比例尺的大小。例如地图上1厘米代表实地距离500千米,可写成:150,000,000或写成:1/50,000,000

  <Resolution>,代表分辨率。Resolution 的实际含义代表当前地图范围内,1像素代表多少地图单位(X地图单位/像素),地图单位取决于数据本身的空间参考。

   当我们在进行Web API的开发时,经常会碰到根据Resolution来缩放地图的情况。但是实际需求中我们更需要根据Scale来缩放,因此就涉及到ScaleResolution的转换。

ResolutionScale的转换算法:

Resolutiondpi有关,跟地图的单位有关。(dpi代表每英寸的像素数)

  ResolutionScale的转换算法

举例:

   案例一:如果地图的坐标单位是米, dpi96

           1英寸= 2.54厘米;

           1英寸=96像素;

           最终换算的单位是米;

           如果当前地图比例尺为1: 125000000,则代表图上1米实地125000000米;

           米和像素间的换算公式:

           1英寸=0.0254=96像素

           1像素=0.0254/96

           1(100厘米/2.54)*96=3779.5275590551181102362204724414像素

           则根据1125000000比例尺,图上1像素代表实地距离是125000000*0.0254/96= 33072.9166666667米。我们这个换算结果和切片的结果略微有0.07米的误差。这个误差产生的原因是英寸换算厘米的参数决定的,server使用的换算参数1英寸约等于0.0254000508米。

          

   案例二:如果地理坐标系是wgs84,地图的单位是度,dpi96

           Server中度和米之间的换算参数:

             1度约等于 111194.872221777

          接下来就需要进行度和像素间的换算:

         当比例尺为1:64000000米时,相当于1像素= 64000000*0.0254000508/96 = 16933.3672

再将米转换为度 16933.3672/111194.872221777 =0.1522855043731385

因此当地图单位为度时,近似计算在1:64000000 对应的Resolution0.1522855043731385

验证结果:

<LODInfos xsi:type="typens:ArrayOFLODInfo">
	<LODInfo xsi:type="typens:LODInfo">
	<LevelID>0</LevelID>
	<Scale>64000000</Scale>
	<Resolution>0.1522855043731379</Resolution>
</LODInfo>
<LODInfo xsi:type="typens:LODInfo">
	<LevelID>1</LevelID>
	<Scale>32000000</Scale>
	<Resolution>0.076142752186568949</Resolution>
</LODInfo>
</LODInfos>










  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 您好!下面是一段用 C 语言实现将摄像头测量到物体的深度转化GIS 坐标的代码示例: #include <stdio.h> #include <stdlib.h> int main(void) { // 定义摄像头坐标系中的坐标和深度 double x, y, z; // 定义 GIS 坐标系中的坐标 double lon, lat; // 使用摄像头测量得到的坐标和深度 x = 10.0; y = 20.0; z = 30.0; // 转化GIS 坐标 lon = x / z; lat = y / z; printf("GIS 坐标:(%.2f, %.2f)\n", lon, lat); return 0; } 注意,上述代码仅是一个示例,在实际应用中还需要根据实际情况调整代码。 ### 回答2: 使用C语言编写一个摄像头测量物体深度并转化GIS坐标的代码,可以参考如下: ```c #include <stdio.h> float camera_focal_length = 50.0; // 摄像头焦距,单位为毫 // 根据摄像头参数和深度计算GIS坐标 void calculate_gis_coordinates(float depth, float *x, float *y) { // 假设摄像头光轴与地面平行,简化模型计算 // 根据相似三角形原理计算GIS坐标 *x = depth * x_pixel / (camera_focal_length * pixel_size); *y = depth * y_pixel / (camera_focal_length * pixel_size); } int main() { float depth = 500.0; // 物体深度,单位为毫 int x_pixel = 400; // 物体在图像上的X轴像素位置 int y_pixel = 300; // 物体在图像上的Y轴像素位置 float pixel_size = 0.01; // 图像像素尺寸,单位为毫 float gis_x, gis_y; calculate_gis_coordinates(depth, &gis_x, &gis_y); printf("物体的GIS坐标:(%f, %f)\n", gis_x, gis_y); return 0; } ``` 以上代码为一个简单示例,其中包含了用于计算GIS坐标的函数`calculate_gis_coordinates()`,并在`main()`函数中演示了如何使用该函数将深度转化GIS坐标。在实际应用中,还需要根据具体的摄像头参数、图像像素、深度传感器等进行适当调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值