# 坐标转换

# 示意图

名称 说明
几何坐标 图中实际的坐标
经纬度坐标 地理坐标(在渲染时必须要转成经纬度坐标)
墨卡托坐标 投影坐标

提示

如果图形的坐标系非经纬度坐标系,则几何计算如相交、插值等请使用 几何坐标渲染时再转成 经纬度坐标

提示

如果map关联了投影对象 map.attach(svc, prj);则
map.toLngLat 等价于 prj.toLngLat
map.fromLngLat 等价于 prj.fromLngLat

总结:
CAD实际几何坐标 转 底层渲染的经纬度坐标 一律请调用 toLngLat (与底层绘制有关的,都得调用toLngLat转经纬度)
由底层渲染的经纬度坐标 转 CAD实际几何坐标 一律请调用 fromLngLat (得到CAD图上面的实际几何坐标,都得调用fromLngLat转CAD实际几何坐标)

提示

我们这里说的经纬度坐标只有在底图为互联网底图(如天地图、高德地图)时,才是真正的经纬度坐标。
否则为CAD底图时,经纬度坐标值只是一个用于底层渲染的坐标值,没有实际的地理意义,只是为了解决大坐标渲染的问题和统一互联网底图和CAD底图坐标的需要
如果CAD底图是有真正地理坐标系,如北京54坐标、西安80坐标、2000坐标系时,需要转换成wgs84经纬度时,可以用SDK提供的vjmap.transform.convert方法或者自己用第三方库如proj4进行转换,具体可以参考演示示例中的互联网地图 或者使用四参数对不同的坐标系进行坐标转换如何把另外一个坐标系的数据叠加到当前cad图上 (opens new window)

# 投影坐标系

名称 描述 说明 初始化
GeoProjection 几何投影坐标系 图形的坐标非经纬度坐标,而是实际的图的几何坐标数据 new vjmap.GeoProjection(图形的实际范围);
LnglatProjection 经纬度投影坐标系 图形的坐标本身就是经纬度坐标 new vjmap.LnglatProjection()

# 转换

// 获取地图的范围 res.bounds 为打开图后返回的图形范围
let mapExtent = vjmap.GeoBounds.fromString(res.bounds);
// 根据地图范围建立几何投影坐标系
let prj = new vjmap.GeoProjection(mapExtent);
// 如果是图形坐标是经纬度,则根据地图范围建立经纬度投影坐标系
// let prj = new vjmap.LnglatProjection();


// 几何坐标转经纬度
let lngLat = prj.toLngLat(mapExtent.center());

// 经纬度转几何坐标
let geo = prj.fromLngLat(lngLat);
1
2
3
4
5
6
7
8
9
10
11
12
13