Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UIView(非MKMapView)中使用lat/long的最佳实践_Ios_Cocoa Touch_Uiview_Geolocation_Uikit - Fatal编程技术网

Ios 在UIView(非MKMapView)中使用lat/long的最佳实践

Ios 在UIView(非MKMapView)中使用lat/long的最佳实践,ios,cocoa-touch,uiview,geolocation,uikit,Ios,Cocoa Touch,Uiview,Geolocation,Uikit,基本上,我有一个POI列表(名称、纬度、长度),我想在UIView上绘制它们,相对于我当前的纬度/长度。我正在寻找将这些POI(lat/long)映射到UIView的最佳实践 我不想使用MKMapView(不需要显示地图数据) 我在读: 但是我不知道如何在我的UIView上从一个CLLocation到一个(x,y)。我只想在我现在的位置画那些POI。例如,如果我的屏幕代表一个20×30公里的区域,我如何将我的POI映射到它们相应的(x,y)坐标 P.>我猜想,对于一个30公里的20公里的区域,

基本上,我有一个POI列表(名称、纬度、长度),我想在UIView上绘制它们,相对于我当前的纬度/长度。我正在寻找将这些POI(lat/long)映射到UIView的最佳实践

不想使用MKMapView(不需要显示地图数据)

我在读:

但是我不知道如何在我的UIView上从一个CLLocation到一个(x,y)。我只想在我现在的位置画那些POI。例如,如果我的屏幕代表一个20×30公里的区域,我如何将我的POI映射到它们相应的(x,y)坐标


P.>我猜想,对于一个30公里的20公里的区域,你可以认为地球是平的,因此线性地推断出坐标。我相信你可以通过谷歌搜索,找出0.00001的经纬度差是多少

因此,如果要在X轴上表示20Km,并且当前位置的纬度为30.1234567,0.0000001为1km,则可以将坐标放置在屏幕的中心,将30.1234557作为最左侧的X坐标,依此类推

我不是想在这里提供答案,只是想大声思考,因为我也想做一些类似的事情,并且作为一个基于互联网的应用程序(没有显示),在给定两个坐标的情况下,我必须找到它们之间的距离。

有很多(很多)对行星建模和将三维坐标转换到二维表面的不同方法,以及不同方法引入的误差因您所处的地球部位而异。这个问题似乎涵盖了你所追求的大部分内容:


您所做的有点奇怪,但是您可以将纬度/经度转换为类似于
CGPoint
的结构,称为
MKMapPoint
MKMapPoint
具有与地图上的点相对应的
x
y
值。想象一下,如果你画了一张平面的世界地图,0,0是左上角
MKMapPoint
是地图上使用该坐标系的点

使用函数
MKMapPointForCoordinate()
CLLocationCoordinate2D
转换为
MKMapPoint

MKMapPoint myMapPoint = MKMapPointForCoordinate(myLocationCoordinate);
当您获得点列表时,您必须执行一些操作,例如查找最大和最小x和y值,然后使用这些值将所有点拟合到您的视图中,否则您将在视图中的一个位置得到大量非常接近的点。

我认为这是最好的方法(正确适用于):


我在UIView上添加坐标的简单项目:

不要尝试此操作。在您考虑的尺寸(20km)下,变换肯定不是线性的,也不是一致的。在我的日常工作中,我们发现可以在米的距离上得到变换失真。井20*30KM就是一个例子。我想收缩并缩放到更小(或更大)的区域。但这是否意味着我需要使用MKMap?我去玩它。我不明白有什么奇怪?我基本上想要没有卫星图像的MKMapView。你可以使用
MKMapPointForCoordinate()
而不使用
MKMapView
。您仍然需要导入MapKit框架才能使用该函数。此外,您还可以在没有卫星图像的情况下查看地图。只需将
MKMapType
设置为
MKMapTypeStandard
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)
    }
}