如果我有一个JPEG地图大小SIZEX,SIZEY
和地图上的一些校准点(X,Y,经度,纬度)
什么是计算在地图上相应的XY点与给定的经度/纬度对的算法?
如果我有一个JPEG地图大小SIZEX,SIZEY
和地图上的一些校准点(X,Y,经度,纬度)
什么是计算在地图上相应的XY点与给定的经度/纬度对的算法?
这里是为我工作,没有这么多的学士学位。
int x = (int) ((MAP_WIDTH/360.0) * (180 + lon));
int y = (int) ((MAP_HEIGHT/180.0) * (90 - lat));
该纬度,经度坐标,通过Android设备给我。 因此,他们应该在所有谷歌地球/地图产品相同的标准。
如果使用的是等距圆柱投影类型的地图 ,这里是你需要做什么:
有大量的信息在互联网有关计算经度和纬度的两个配对之间的距离上。 我们正在使用我们的公共网站这些计算,他们是不平凡的理解/讨论(所以我不会尝试在这里介绍它们)。 这就是说,它们很容易实现。
一旦你有一个返回距离的函数,你应该能够caculate地图的宽度和高度,在弯道间距离方面。
然后你可以从左上角计算你点的水平和垂直距离。
现在,你发现什么地图的宽度的比例由左侧和你的点之间的距离来表示,应用比例的像素宽度和你的左边,你的点之间的像素数。 重复的y轴。
(从左侧的像素)=(以像素为单位总宽度)*(左和您的点之间(地址解析距离)左侧和右侧之间/(地址解析距离))
(像素从顶部)=(以像素为单位总高度)*(顶部和点之间(地理编码的距离)/(顶部和底部之间的地理编码的距离))
编辑:作为你研究这进一步,你会注意到,一些解决方案将提供比其他人更准确的结果,因为事实上,你是两点之间的球形表面近似距离,该映射在一个平面上。 精度随着距离的增加而减小。 给你最好的建议是先尝试一下,看看它是否符合您的需求。
这是相当简单的,简单的..让我解释的可能。
纬度和经度是地球上绘制,让您可以准确地查明对世界任何地点的假想线。 简单地说,他们是一个平面的X和Y COORDS。 纬度是在南极,从北到南,其90度的北极和-90deg运行的垂直线。
经度,另一方面是在东部西部和180deg -180deg东至南水平线。
你可以的经纬度转换为像素COORDS由假设HTML容器的宽度是世界的宽度和同样适用于高度。
公式-经度-像素
(givenLng*widthOfContainerElement)/360
其中360是在度总经度
公式-Latitude -像素
(givenLat*heightOfContainerElement)/180
其中180是在度总纬度
//Height is calculated from the bottom
你可以在这里找到这个公式的执行工作, 在我的网站 (它使用JavaScript只)
http://www.learntby.me/javascript/latLngconversion.php
让我知道如果你还需要任何澄清。
有许多不同的地图投影方案。 你必须知道你的地图是使用哪个(些)。
有关地图投影算法的更多信息和正向/反向映射检查出此链接 。 它提供了公式用于一些普通突起。
只是让这(对于墨卡托投影图):
extension UIView
{
func addLocation(coordinate: CLLocationCoordinate2D)
{
// max MKMapPoint values
let maxY = Double(267995781)
let maxX = Double(268435456)
let mapPoint = MKMapPointForCoordinate(coordinate)
let normalizatePointX = CGFloat(mapPoint.x / maxX)
let normalizatePointY = CGFloat(mapPoint.y / maxY)
let pointView = UIView(frame: CGRectMake(0, 0, 5, 5))
pointView.center = CGPointMake(normalizatePointX * frame.width, normalizatePointY * frame.height)
pointView.backgroundColor = UIColor.blueColor()
addSubview(pointView)
}
}
我简单的项目添加协调的UIView: https://github.com/Glechik/MapCoordinateDrawer
<!DOCTYPE html> <html> <head> <style> #point{font-face:Arial; font-size:18px; color:#FFFF00; width:12px; height:12px;text-shadow: 2px 2px #000000} #canvas {position: absolute; top: 0px; left: 0px; z-index: -2} html, body, #canvas { width: 100%; height: 100%; overflow: hidden; margin: 0 } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> <script> $(window).on("load resize",function(e){ var w = $("#canvas").width(); var h = $("#canvas").height(); // New York, NY (https://maps.googleapis.com/maps/api/geocode/json?address=New%20York,%20NY) var lat = 40.91525559999999; var long = -73.70027209999999; var x = ((w/360) * (180 + long)) - 9; var y = ((h/180) * (90 - lat)) - 18; $("#text").text('X:'+x+', Y:'+y); $("#point").offset({ top: y, left: x }); }); </script> </head> <body> <div id="text"></div> <div id="point">▼</div> <img id="canvas" border="0" src="http://friday.westnet.com/~crywalt/dymaxion_2003/earthmap10k.reduced.jpg"> </body> </html>