Fengmap地图坐标系统为Web Mercator投影坐标系,基准面为WGS84,坐标单位为米,坐标转化类为FMKLocateCoordTransformer.h。
SDK提供两种坐标转化到Fengmap方法:
1、WGS84坐标转化为Fengmap坐标;
2、相对坐标转化为Fengmap坐标。
示例代码如下:
//此为定位经纬度,其中x为经度,y为纬度
FMKMapPoint lonlat;
//进行坐标转化,并返回转化后的Fengmap坐标
FMKMapPoint mapPoint = [FMKLocateCoordTransformer geographicCoordinate2MercatorWithCoordinate:lonlat];
相对坐标的转化,需要处理好:原点坐标对应、X/Y轴地图方向、坐标值比例三个对应关系,即可正确转化。
一般室内定位系统,使用图片作为定位计算数据,左上点为原点(0, 0),Y轴向下为正方向,FengmapY轴向上为正方向,正好相反。Fengmap地图左下角为最小x,最小y坐标。
坐标转化对应点如图所示:
转化方法如下:
初始化坐标转化工具类对象
//初始化坐标转化工具对象,用于相对坐标转化为Fengmap坐标
_transformer = [[FMKLocateCoordTransformer alloc] init];
设置定位系统参数
//设置定位系统参数
//参数包括定位系统原点坐标以及定位系统所使用地图的宽高值,如定位系统使用图片作为基准, 则原点一般为(0, 0),宽高参数为图片像素宽高
[_transformer setLocateOrigin:CGPointZero locateRange:CGPointMake(231, 821)];
设置对应Fengmap参数
//该方法设置fengmap对应定位系统的相应点参数,具体对应点图解参见上图
// origin: 原点坐标参数为定位系统原点映射到Fengmap的点坐标,通过代码FMKMapInfo获取到的(minX, minY)与该值不同,
// xLimitPoint: 定位系统X轴正方向最大值的点坐标映射到Fengmap上的点坐标
// yLimitPoint: 定位系统Y轴正方向最大值的点坐标映射到Fengmap上的点坐标
[_transformer setFengmapOrigin:FMKMapPointMake(12957659, 4862122.7, 0) fmXLimitPoint:FMKMapPointMake(12957668.3, 4862122.7, 0) fmYLimitPoint:FMKMapPointMake(12957659, 4862089.7, 0)];
坐标转化
//进行坐标转化,并返回转化结果,其中location为定位系统返回的定位参数对象,若转化失败则返回(0, 0)
FMKMapPoint point = [_transformer transformWithLocatePoint:CGPointMake(location.x, location.y)];