-
地理坐标(经纬度坐标)和屏幕坐标(xy坐标)间的转换
2019-10-28 10:31:57在我们的屏幕上,有一张地图,这张地图经过缩放、平移、旋转,最终地理坐标和屏幕坐标的关系大致如下图所示: 这种关系要怎么描述呢?我们可以假设地图是一张纸,而屏幕是一堵墙。只要我们有两个图钉,我们就能把...在我们的屏幕上,有一张地图,这张地图经过缩放、平移、旋转,最终地理坐标和屏幕坐标的关系大致如下图所示:
这种关系要怎么描述呢?我们可以假设地图是一张纸,而屏幕是一堵墙。只要我们有两个图钉,我们就能把纸定在墙上。我们把这两个点称为锚点。锚点在屏幕坐标系上的坐标是(x1,y1)和(x2,y2),对应在地理坐标系上的坐标是(lon1,lat1)和(lon2,lat2)。
那现在的问题就变成了,已知两个锚点的坐标,
(1)地理坐标转屏幕坐标:已知任意一点的地理坐标(lon,lat),求它在屏幕上的坐标(x,y)
(2)屏幕坐标转地理坐标:已知任意一点的屏幕坐标(x,y),求它的经纬度坐标(lon,lat)
转换算法
1、地理坐标平面化
首先是地理坐标的平面化转化。在一个小范围内(例如是方圆几公里内),我们可以假设地面是平的,而不是弯的。如果经纬度都用弧度表示,那么1纬度对应的长度是:
1lat_len=R*lat
其中R是地球半径。
而相同经度间的距离会随着纬度的增加而减少,在lat这一纬度下,1经度对应的长度是:
1lon_len=R*lon*cos(lat)
那么,(lon,lat)这个坐标平面化后的坐标就是:(R*lon*cos(lat),R*lat)
2、向量法
由已知点和未知点组成两组向量:
由于坐标系转换是线性变换,所以两组向量有以下特性:
(1)两向量在不同的坐标系中的长度比是相同的。
(2)两向量在不同的坐标系中的夹角是相同的。
根据上面两个特性,我们可列出方程组:
设向量1为(dx1,dy1),(dlon1,dlat1),向量2为(dx2,dy2),(dlon2,dlat2),
其中dx1=x2-x1,dy1=y2-y1,dlon1=lon2-lon1,dlat1=lat2-lat1
dx2=x-x1,dy2=y-y1,dlon2=lon-lon1,dlat2=lat-lat1,
然后k1=norm(dx1,dy1),k2=norm(dlon1,dlat1),k3=norm(dx2,dy2),k4=norm(dlon2,dlat2)
有方程组:
(1)k1/k2 = k3/k4
(2)(dx1*dlon1+dy1*dlat1)/k1/k2 = (dx2*dlon2+dy2*dlat2)/k3/k4
通过解上面的方程组,我们就能得到未知和屏幕坐标或未知的地理坐标。
3、C#代码实现
地理坐标转屏幕坐标:
double lon_cos = Math.Cos(lat2 * Math.PI / 180); double m = (lon2 - lon1) * lon_cos; double n = (lat2 - lat1); double p = (lon - lon1) * lon_cos; double q = (lat - lat1); double M = x2 - x1; double N = y2 - y1; double a = (p * p + q * q) * (M * M + N * N) / (m * m + n * n); double b = (m * p + q * n) * norm(M, N) * Math.Sqrt(a) / (norm(m, n) * norm(p, q)); double c = Math.Sqrt(b * b * N * N - (M * M + N * N) * (b * b - a * M * M)); double Q1 = (b * N + c) / (M * M + N * N); double Q2 = (b * N - c) / (M * M + N * N); double P1 = (b - Q1 * N) / M; double P2 = (b - Q2 * N) / M; double x_1 = P1 + x1; double y_1 = Q1 + y1; double x_2 = P2 + x1; double y_2 = Q2 + y1; double judge1 = (x_1 - x1) * (y2 - y1) - (y_1 - y1) * (x2 - x1); double judge2 = (x_2 - x1) * (y2 - y1) - (y_2 - y1) * (x2 - x1); double judge = (lon - lon1) * (lat2 - lat1) - (lat - lat1) * (lon2 - lon1); double x = 0; double y = 0; if (judge * judge1 < 0) { x = x_1; y = y_1; } else { x = x_2; y = y_2; }
屏幕坐标转地理坐标:
double lon_cos = Math.Cos(lat2 * Math.PI / 180); double m = (lon2 - lon1) * lon_cos; double n = (lat2 - lat1); double M = x2 - x1; double N = y2 - y1; double P = x - x1; double Q = y - y1; double a = (P * P + Q * Q) * (m * m + n * n) / (M * M + N * N); double b = (M * P + Q * N) * norm(m, n) * Math.Sqrt(a) / (norm(M, N) * norm(P, Q)); double c = Math.Sqrt(b * b * n * n - (m * m + n * n) * (b * b - a * m * m)); double q1 = (b * n + c) / (m * m + n * n); double q2 = (b * n - c) / (m * m + n * n); double p1 = (b - q1 * n) / m; double p2 = (b - q2 * n) / m; double lon_1 = p1 / lon_cos + lon1; double lat_1 = q1 + lat1; double lon_2 = p2 / lon_cos + lon1; double lat_2 = q2 + lat1; double judge1 = (lon_1 - lon1) * (lat2 - lat1) - (lat_1 - lat1) * (lon2 - lon1); double judge2 = (lon_2 - lon1) * (lat2 - lat1) - (lat_2 - lat1) * (lon2 - lon1); double judge = (x - x1) * (y2 - y1) - (y - y1) * (x2 - x1); double lon = 0; double lat = 0; if (judge * judge1 < 0) { lon = lon_1; lat = lat_1; } else { lon = lon_2; lat = lat_2; }
-
supermap 屏幕坐标转换为经纬度_【技巧】利用谷歌地图,将经纬度转换为XY坐标,导入CAD制图...
2020-12-16 01:08:11这次来讲讲如何将GOOGLE地图制作成CAD地图。1、打开谷歌地图,找到要制作的区域,比如这个水库:2、找到标尺图标,因为是制作一个封闭的水库,所以选择“多边形”,如果是制作道路,就选择“路径”:3、用鼠标勾选...这次来讲讲如何将GOOGLE地图制作成CAD地图。
1、打开谷歌地图,找到要制作的区域,比如这个水库:
2、找到标尺图标,因为是制作一个封闭的水库,所以选择“多边形”,如果是制作道路,就选择“路径”:
3、用鼠标勾选水库的轮廓,可以看到周长和面积即时反映在标尺窗口。
4、在勾选时如果要修改,可以让鼠标在勾好的点上停留,变成“手”形,就可以左键拖拽修改,也可以在变手型时单击左键增加点,单击右键删除点。
5、勾选完成,形成闭合区间,显示周长和面积。
6、对多边形进行重命名,并根据喜好更改颜色。
7、对保存好的“水库”右键,选择“将位置另存为”
展开快速插图
8、另存为KML格式
9、用记事本打开“水库.kml”,会看到里面有刚刚勾选的点的大地坐标
10、复制这些大地坐标到word里面进行编辑,因为这些坐标是没有分行排列的,而是用一个一个的空格接一起:
11、可以看到所有的大地坐标有规律的用空格连接,我们需要把他们分行,也就是每个坐标后面是回车
12、复制这些空格,选择替换功能,把空格替换成回车
13、回车的代表符是“^p”,点击全部替换。
14、这样就得到了分行好的各点大地坐标,方面我们批量转换成平面坐标。
15、将分行好的大地坐标复制到新建的个“shuiku.txt”文本里面。
16、由于没有高程数据,所以把高程部分全部删除,才用的方法仍然是替换:
17、仅仅保留经度和纬度的格式:
18、打开coord4.0,源格式选择大地坐标(度),选择“文件转换”
19、首选自定义一种格式,我这里自定义的格式为“jw(*.txt)”也就是(经度,纬度,)的格式,选择这个格式:
20、转换方法选择,然后点确定。
21、选择源文件“shuiku.txt”
22、点确定。
23、点转换图标,可以看到已经转换成了“shuiku1.txt”。这里注明下,我是把大地坐标转换成北京54坐标。
24、打开转换后的shuiku1.txt,可以看到已经转换成功。
25、为了怕编辑出错,先复制一个副本备份。
26、把副本改名成csv格式进行编辑:
27、用excel打开“shuiku2.csv”
28、先插入2列,第一列填充序号,代表点号,第二列空白,
29、后面加一列,代表高程,全部填充“0”,加这一列是由于南方CASS数据格式的需要。
30、将表格另存为“文本文件(制表符分割)”
31、打开新得到的shuiku2.txt,发现很多空格,我们利用这些空格,制作成南方CASS格式的数据文件。
32、通用是把空格复制,替换为逗号:
33、复制空格,替换为逗号:
34、由于我只需要5位数的坐标,所以把多余的数字也全部删除,同样才用替换的方法:
35、好了,可以看得出来,已经得到了南方CASS的数据格式了。
36、剩下来的就不多说了,看到这里的人都会用了。
-----END-----
社群交流 / 原创投稿 / 商务合作
(请添加下方小家微信:mysurvey)
来源:测量
推荐阅读
【技术】如何快速制作数据地图?让你的可视化逼格再高一级!
【干货】最详细的一期、两期土方量计算方法!你学会了吗?
【科普】防控重大疫情,怎么离得开地图的身影?
【收藏】北大、清华、复旦、武大等校400门公开课汇总,看这里!
推荐关注
觉得不错请点赞!转发!↓↓↓点击下方“
-
supermap 屏幕坐标转换为经纬度_干货在线 | 利用谷歌地图,将经纬度转换为xy坐标,导入CAD制图...
2020-12-16 01:08:05来讲讲如何将GOOGLE地图制作成CAD地图~1、打开谷歌地图,找到要制作的区域,比如这个水库:2、找到标尺图标,因为是制作一个封闭的水库,所以选择“多边形”,如果是制作道路,就选择“路径”:3、用鼠标勾选水库的...来讲讲如何将GOOGLE地图制作成CAD地图~
1、打开谷歌地图,找到要制作的区域,比如这个水库:
2、找到标尺图标,因为是制作一个封闭的水库,所以选择“多边形”,如果是制作道路,就选择“路径”:
3、用鼠标勾选水库的轮廓,可以看到周长和面积即时反映在标尺窗口。
4、在勾选时如果要修改,可以让鼠标在勾好的点上停留,变成“手”形,就可以左键拖拽修改,也可以在变手型时单击左键增加点,单击右键删除点。
5、勾选完成,形成闭合区间,显示周长和面积。
6、对多边形进行重命名,并根据喜好更改颜色。
7、对保存好的“水库”右键,选择“将位置另存为”展开快速插图
8、另存为KML格式
9、用记事本打开“水库.kml”,会看到里面有刚刚勾选的点的大地坐标
10、复制这些大地坐标到word里面进行编辑,因为这些坐标是没有分行排列的,而是用一个一个的空格接一起:
11、可以看到所有的大地坐标有规律的用空格连接,我们需要把他们分行,也就是每个坐标后面是回车
12、复制这些空格,选择替换功能,把空格替换成回车
13、回车的代表符是“^p”,点击全部替换。
14、这样就得到了分行好的各点大地坐标,方面我们批量转换成平面坐标。
15、将分行好的大地坐标复制到新建的一个“shuiku.txt”文本里面。
16、由于没有高程数据,所以把高程部分全部删除,才用的方法仍然是替换:
17、仅仅保留经度和纬度的格式:18、打开coord4.0,源格式选择大地坐标(度),选择“文件转换”
19、首选自定义一种格式,我这里自定义的格式为“jw(*.txt)”也就是(经度,纬度,)的格式,选择这个格式:
20、转换方法选择,然后点确定。
21、选择源文件“shuiku.txt”
22、点确定。
23、点转换图标,可以看到已经转换成了“shuiku1.txt”。这里注明下,我是把大地坐标转换成北京54坐标。
24、打开转换后的shuiku1.txt,可以看到已经转换成功。
25、为了怕编辑出错,先复制一个副本备份。
26、把副本改名成csv格式进行编辑:
27、用excel打开“shuiku2.csv”
28、先插入2列,第一列填充序号,代表点号,第二列空白,
29、后面加一列,代表高程,全部填充“0”,加这一列是由于南方CASS数据格式的需要。
30、将表格另存为“文本文件(制表符分割)”
31、打开新得到的shuiku2.txt,发现很多空格,我们利用这些空格,制作成南方CASS格式的数据文件。
32、通用是把空格复制,替换为逗号:
33、复制空格,替换为逗号:
34、由于我只需要5位数的坐标,所以把多余的数字也全部删除,同样才用替换的方法:
35、好了,可以看得出来,已经得到了南方CASS的数据格式了。
36、剩下来的就不多说了,看到这里的人都会用了。-END-
版权声明:小智致力于分享精选,本篇推送文章来源测量,本文版权归原作者所有,若涉及版权问题,烦请原作者联系我们,我们会在24小时内删除处理,并表示歉意,谢谢!
欢迎在下方留言与我们互动哦~
-
python将经纬度坐标转换为xy_利用谷歌地图,将经纬度转换为XY坐标,导入CAD制图...
2021-01-09 18:34:48这次来讲讲如何将GOOGLE地图制作成CAD地图。1、打开谷歌地图,找到要制作的区域,比如这个水库:2、找到标尺图标,因为是制作一个封闭的水库,所以选择“多边形”,如果是制作道路,就选择“路径”:3、用鼠标勾选...这次来讲讲如何将GOOGLE地图制作成CAD地图。
1、打开谷歌地图,找到要制作的区域,比如这个水库:
2、找到标尺图标,因为是制作一个封闭的水库,所以选择“多边形”,如果是制作道路,就选择“路径”:
3、用鼠标勾选水库的轮廓,可以看到周长和面积即时反映在标尺窗口。
4、在勾选时如果要修改,可以让鼠标在勾好的点上停留,变成“手”形,就可以左键拖拽修改,也可以在变手型时单击左键增加点,单击右键删除点。
5、勾选完成,形成闭合区间,显示周长和面积。
6、对多边形进行重命名,并根据喜好更改颜色。
7、对保存好的“水库”右键,选择“将位置另存为”
展开快速插图
8、另存为KML格式
9、用记事本打开“水库.kml”,会看到里面有刚刚勾选的点的大地坐标
10、复制这些大地坐标到word里面进行编辑,因为这些坐标是没有分行排列的,而是用一个一个的空格接一起:
11、可以看到所有的大地坐标有规律的用空格连接,我们需要把他们分行,也就是每个坐标后面是回车
12、复制这些空格,选择替换功能,把空格替换成回车
13、回车的代表符是“^p”,点击全部替换。
14、这样就得到了分行好的各点大地坐标,方面我们批量转换成平面坐标。
15、将分行好的大地坐标复制到新建的个“shuiku.txt”文本里面。
16、由于没有高程数据,所以把高程部分全部删除,才用的方法仍然是替换:
17、仅仅保留经度和纬度的格式:
18、打开coord4.0,源格式选择大地坐标(度),选择“文件转换”
19、首选自定义一种格式,我这里自定义的格式为“jw(*.txt)”也就是(经度,纬度,)的格式,选择这个格式:
20、转换方法选择,然后点确定。
21、选择源文件“shuiku.txt”
22、点确定。
23、点转换图标,可以看到已经转换成了“shuiku1.txt”。这里注明下,我是把大地坐标转换成北京54坐标。
24、打开转换后的shuiku1.txt,可以看到已经转换成功。
25、为了怕编辑出错,先复制一个副本备份。
26、把副本改名成csv格式进行编辑:
27、用excel打开“shuiku2.csv”
28、先插入2列,第一列填充序号,代表点号,第二列空白,
29、后面加一列,代表高程,全部填充“0”,加这一列是由于南方CASS数据格式的需要。
30、将表格另存为“文本文件(制表符分割)”
31、打开新得到的shuiku2.txt,发现很多空格,我们利用这些空格,制作成南方CASS格式的数据文件。
32、通用是把空格复制,替换为逗号:
33、复制空格,替换为逗号:
34、由于我只需要5位数的坐标,所以把多余的数字也全部删除,同样才用替换的方法:
35、好了,可以看得出来,已经得到了南方CASS的数据格式了。
36、剩下来的就不多说了,看到这里的人都会用了。
文章转载于测量版权归原作者所有,如有侵权请告知删除- END -使用PS(Photoshop)软件手动去除谷歌地球影像的色差
技术 | 用谷歌高程数据生成地形图
全面讲解2000坐标系和WGS84坐标系的区别联系
“2000坐标”成了标配,你还不懂坐标系定义和转换吗?
-
python将经纬度坐标转换为xy_利用谷歌地图,将经纬度转换为xy坐标,导入CAD制图...
2021-01-04 12:26:00这次再来讲讲如何将GOOGLE地图制作成CAD地图。1、打开谷歌地图,找到要制作的区域,比如这个水库:2、找到标尺图标,因为是制作一个封闭的水库,所以选择“多边形”,如果是制作道路,就选择“路径”:3、用鼠标勾选... -
python将经纬度坐标转换为xy_技巧利用谷歌地图,将经纬度转换为XY坐标,导入CAD制图...
2021-01-09 18:34:46这次来讲讲如何将GOOGLE地图制作成CAD地图。1、打开谷歌地图,找到要制作的区域,比如这个水库:2、找到标尺图标,因为是制作一个封闭的水库,所以选择“多边形”,如果是制作道路,就选择“路径”:3、用鼠标勾选... -
经纬度坐标转换xy坐标 python_在Python中使用NewtonRaphson迭代将经纬度转换为x&y Mollweide地图坐标...
2020-12-04 19:48:45我试图编写一个程序,从用户那里获取一组经度和纬度坐标,将它们转换为Mollweide投影图的x&y坐标,然后报告这些坐标处的像素值(在本例中,是噪声温度)。在我使用的地图/数据是Haslam 408 MHz All Sky Survey,它... -
墨卡托坐标与经纬度转换
2018-12-20 16:55:19zoom为地图层级,最小zoom=0,此时瓦片总数量为1 X轴或Y轴的瓦片数量=2^zoom 瓦片总数量=2^zoom*2^zoom 每个瓦片像素为256*256 如:当zoom=2时,X轴Y轴的瓦片数量都为2^zoom=4,瓦片总数量=2^zoom*2^zoom=16... -
proj4经纬度bl转换xy_在Web客户端中基于Proj4实现坐标转换
2020-12-30 16:53:47这对于C/S应用来说,是最为常见的辅助功能,即使是在B/S中,这似乎也不是难事,比如谷歌地图等都能提供这个功能,但是我们也知道,这些地图数据是固定投影的,获取经纬度坐标的途径是单一的,而这也不是本文要考虑的... -
python将经纬度坐标转换为xy_一篇文章搞定 Python proj 经纬坐标模块
2020-12-30 15:38:01proj 经纬坐标模块简介proj不光是一些应用程序的集合,它更是一个库,其它语言可以来调用它,来进行更高级的开发和应用。在proj安装上之后,它...可以很方便的对点来进行地图投影转换。同时在它的基础上开发出更高... -
Google地图经纬度与平面坐标的相互转换、简单地图Demo
2014-07-24 01:24:39这是我的文章【Google地图经纬度与平面坐标的相互转换、简单地图Demo】的附件,内含无水印世界地图、简单地图demo源码 接到公司派下来的一个任务,让我做一个简单的地图Demo,要求是输入城市名,然后在地图上标记出... -
proj4经纬度bl转换xy_如何使用PROJ.4将坐标从WGS84转换为投影坐标?
2020-12-30 16:53:50我有一个WGS84中的GPS坐标,我想要在SWEREF99 TM中使用Java中的PROJ.4或JavaScript中的Proj4js转换为地图投影坐标。如何使用PROJ.4将坐标从WGS84转换为投影坐标?很难找到关于PROJ.4的文档以及如何使用它。如果您有... -
openlayer3 坐标系转换
2019-09-23 09:29:28'EPSG:4326'-经纬度坐标-WGS84'EPSG:3857'- xy坐标-web墨卡托 ol3默认的坐标系为3857,即在创建ol.map的时候,若不指定projection,则默认为EPSG:3857 转换方法如下: var m_center=[116.35,39.9];//地图中心点... -
奥维地图如何显示2000坐标_奥维地图和cad
2021-01-17 08:49:00科学网-2000坐标系经纬度和转换方法 - 周朝宪的博文blog.sciencenet.cn转换成经纬度如何选择坐标系 | 奥维互动地图浏览器第一种方法走到那个点位上 然后用奥维地图蹲点获得第二种 找到参考点通过奥维地图cad点击... -
cad图形如何导入到奥维地图_奥维地图和cad
2020-12-08 17:02:00科学网-2000坐标系经纬度和转换方法 - 周朝宪的博文blog.sciencenet.cn转换成经纬度如何选择坐标系 | 奥维互动地图浏览器第一种方法走到那个点位上 然后用奥维地图蹲点获得第二种 找到参考点通过奥维地图cad点击... -
【技术教程】提取单个宗地界址点坐标值(xy转经纬度)并排序
2018-06-20 17:47:511、需求:提取宗地的界址点坐标并重新排序,坐标值为经纬度。2、源文件:dwg格式宗地图,xian1980投影坐标系3度分带37度带。3、使用转换器:CsmapReprojector、Chopper、Counter、CoordinateExtractor、... -
人人都可以做的WebGIS·共享在线地图服务——将机场表格数据在在线地图上显示
2019-05-05 13:04:042.导入ArcMap中用 工具包中的 Excel转Table工具 将数据文件转换 为表并加载在图层上,将表数据设置XY由数据中的经纬度分别表示,显示出来。 (1)首先,确保Excel中有两列是X、Y坐标,如下图所示: (2)打开ArcMap... -
Arcgis中投影和定义投影的区别
2018-11-02 20:06:58今天在项目开发过程中需要对数据...顾名思义,定义投影就是当你只是一堆带有经纬度的表 而且你明确知道它的坐标系统时使用到的,而且当你在arcmap中右键显示XY时,默认就提示是否定义坐标系,而且默认是wgs84地理... -
folium 画图做Circle标记时更换地址出现完全不同的效果
2020-02-27 23:33:21关于folium的实例代码,目的是对一区域划分不同...在使用 pyproj.Proj()进行经纬度和坐标转换时,位置address需要和zone值对对应,否则会出现地图生产不匹配的现象。 对于北半球: ``` zone=int(longitude/6)+31 ``` -
2021-02-04
2021-02-04 10:45:00今天在做arcgis的大作业 ...只能一个个点搜索经纬度坐标然后input xy吗 还有相对应的博物馆名称等信息如何分别匹配到对应点上呢 因为有125个博物馆数据,一个个导入过于繁琐 想知道有没有什么更快捷的方法 ... -
World Map 2D Edition 2 V7.2.2
2020-08-18 17:55:15*计算器:从纬度/经度到XY坐标的单位转换和城市距离计算器。 *滚动、闪烁和淡出信息。 *装饰:定制国家外观(颜色,纹理,标签)。 *地图编辑器:使用先进的工具(创建/修改/重塑/合并国家、省、市…)在Unity... -
coordinateToContainerPoint
2021-01-08 02:33:36<div><p>经纬度转屏幕坐标时有问题? 当我使用 const projection = map.getProjection(); var xy= projection.project(new maptalks.Coordinate(h[0], h[1])); xy= map._prjToContainerPoint...
-
Galera 高可用 MySQL 集群(PXC v5.6 + Ngin
-
Glasterfs 分布式网络文件系统
-
2021-02-26
-
vlc3_0_9_2.rar
-
深信服负载均衡服务开发设计API接口文档.docx
-
4-文件管理
-
音效整理该资源为各种音效的集合.rar
-
6.数据类型之整形与实型
-
数字图像处理与机器视觉.rar
-
小达人毛毛虫蓝猫贝比点读笔资源.zip
-
2021 年该学的 CSS 框架 Tailwind CSS 实战视频
-
PPTP_NNN 服务生产环境实战教程
-
项目经理成长之路
-
SQL刷题:排名的问题
-
win10+cuda10.0+tensorflow-gpu==1.15安装教程
-
mysql的安装启动基础配置-Windows版
-
大数据驾驶舱、大屏展示、联勤治理、旅游、运输、车辆、校园、舆情、信息监测看板原型.zip
-
APPLICATION FAILED TO START
-
Linux下安装Python3
-
vue3从0到1-超详细