惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
J
Java Code Geeks
IT之家
IT之家
Last Week in AI
Last Week in AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog RSS Feed
P
Proofpoint News Feed
博客园 - Franky
MongoDB | Blog
MongoDB | Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 【当耐特】
Microsoft Security Blog
Microsoft Security Blog
I
InfoQ
B
Blog
Stack Overflow Blog
Stack Overflow Blog
Martin Fowler
Martin Fowler
博客园 - 聂微东
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
大猫的无限游戏
大猫的无限游戏
U
Unit 42
aimingoo的专栏
aimingoo的专栏

博客园 - 莫小龙

wps之使用宏修改全篇表格样式 geoserver之强制配置OnlineResource mysql之将shp转化为wkt,然后存储再geomerty字段内 cesium之用着色器添加建筑贴图 uniapp之plus.downloader.createDownload下载文件传参 谷歌之将网页保存为图片 elementui之table中相同数据的单元格合并 krpano之使用教程 threejs之灯光不跟随OrbitControls控制器旋转 threejs之将张纹理图片组成材质组 canvas之修改Base64图片中不透明部分的颜色 threejs之将PlaneGeometry转换为BufferGeometry threejs之利用shape通过线绘制面和体 threejs之添加渐变背景 threejs之创建发光墙体 arcmap之通过点数据获取等值线 uniapp之安卓APP打开百度地图、高德地图APP openlayer之添加带箭头的线 geoserver之图片图标样式 SHP转WKT文件工具 openlayers之geoserver的wms图层mysql数据源数据修改后更新问题 通过日照时数计算每天RAD(太阳辐射)值 Uniapp之安卓签名证书(.keystore)生成
paperjs之fitBounds适应区域前后屏幕坐标和输入坐标的转换
莫小龙 · 2025-06-11 · via 博客园 - 莫小龙

paperjs之fitBounds适应区域前后屏幕坐标和输入坐标的转换

使用经纬度区域边界创建场景并使用fitBounds将其适应在画布中,代码:

             const app_dom = this.$refs.paperRenderingCanvas;
            this.canvas = document.createElement("canvas");
            this.canvas.width = 1300;
            this.canvas.height = 800;
            let scope = new paper.PaperScope().setup(this.canvas);
            this.view = scope.view;
            this.view.backgroundColor = "white";      
            let viewSize = this.view.viewSize;
            let centerPoint = this.view.center;
            let project = scope.project;
            this.limitInitBounds = this.view.bounds.clone();
            app_dom?.appendChild(this.canvas);

  将边界加入场景中并适配到画布,获取适配前后的中心点和左上点(this.locSign、this.viewSign)用于计算转换

const group = new paper.Group()
const points = getInflectionPointList
const path = new paper.Path()
path.strokeWidth = 3
path.strokeColor = "rgb(120,120,120)"
path.closed = true
for (const point of points) {
      path.add(new paper.Point(point.longitude, point.latitude))
}
group1.addChild(path)
// 获取适配前的中心点和左上点
this.locSign = [group.bounds.centerX, group.bounds.centerY, group.bounds.left, group.bounds.top]
// 转换项目,使其边界适合指定的矩形,而不改变其纵横比。
group1.fitBounds(this.limitInitBounds);
group1.scale(1, -1)
// 获取适配后的中心点和左上点
this.viewSign = [group.bounds.centerX, group.bounds.centerY, group.bounds.left, group.bounds.top]

  转换工具代码:

        // 转换工具  屏幕坐标转经纬度坐标
        viewToLoc(x, y) {
            let lon = (this.locSign[2] - this.locSign[0]) * (x - this.viewSign[0]) / (this.viewSign[2] - this.viewSign[0]) + this.locSign[0]
            let lat = (this.viewSign[1] - y) * (this.locSign[3] - this.locSign[1]) / (this.viewSign[3] - this.viewSign[1]) + this.locSign[1]
            return [lon, lat]
        },
        // 转换工具  经纬度坐转标屏幕坐标
        locToView(lon, lat) {
            let x = (this.viewSign[2] - this.viewSign[0]) * (lon - this.locSign[0]) / (this.locSign[2] - this.locSign[0]) + this.viewSign[0]
            let y = - (this.viewSign[3] - this.viewSign[1]) * (lat - this.locSign[1]) / (this.locSign[3] - this.locSign[1]) + this.viewSign[1]
            return [x, y]
        },

  调用转换工具即可转换坐标。

。。。钻研不易,转载请注明出处