获取指定区域内的坐标点

  • 项目介绍
  • 使用方法
  • 仓库地址

项目介绍

基于 turfjs 库的很简单的封装,实现输入范围的多边形数据,返回指定坐标间隔的点位。
多边形数据可以从高德地图API获取,例如:(该key为方便大家测试使用,请不要滥用哦。)

https://restapi.amap.com/v3/config/district?keywords=鹤城区&subdistrict=0&key=需要自行前往高德地图申请一个&extensions=all

结果中的polyline则是我们的输入值。

使用方法

使用方法很简单,由于依赖于turfjs,所以先安装turf。

npm install @turf/turf

然后是一个简单的封装

import * as turf from '@turf/turf'export default class PointsInArea {constructor(config) {const { pointGap, polylineArray, polyline, gapUnits } = configthis.pointGap = pointGap || 3this.polylineArray = polylineArray // 经纬度坐标点的数组 [[[ 110.088289, 27.504098 ],[ 110.086623, 27.505559 ],...]]this.gapUnits = gapUnits || 'kilometers'if (polyline) {// 描绘多边形的经纬度字符串// 不同的点用;分割// 不同的多边形区域,通过|分割 // e.g. '109.466941,26.831946;109.469596,26.832381;109.471567,26.833027|109.471963,26.833175;109.472047,26.833207;109.472336,26.833345'this.polyline = polylineconst multiPloy = polyline.split('|')this.polylineArray = multiPloy.map(v => {let nerArr = v.split(';')nerArr = nerArr.map(v => v.split(','))nerArr = nerArr.map(v => [Number(v[0]), Number(v[1])])return nerArr})}}generatePointsWithinGrid(singlePloy) {const longitude = singlePloy.map(v => v[0])   //所有经度的数组 [110.058288,110.0606,110.061639,...]const latitude = singlePloy.map(v => v[1]) // 所有纬度的数组 [27.73632, 27.731306, 27.727857, 27.726446,...]const minLongitude = Math.min.apply(Math, longitude) // 最西边const maxLongitude = Math.max.apply(Math, longitude) // 最东边const minLatitude = Math.min.apply(Math, latitude) // 最南边const maxLatitude = Math.max.apply(Math, latitude) // 最北边const myBbox = [minLongitude, minLatitude, maxLongitude, maxLatitude]var cellSide = this.pointGap; // 距离 几公里打一个点var options = { units: this.gapUnits }; // 距离单位var pointInGrid = turf.pointGrid(myBbox, cellSide, options);return pointInGrid}filterPointWithinPolygon(pointInGrid, singlePloy) {const polygon = turf.lineToPolygon(turf.lineString(singlePloy))const ptsWithin = turf.pointsWithinPolygon(pointInGrid, polygon);return ptsWithin.features.map(v => v.geometry.coordinates)}run() {let result = []this.polylineArray.forEach(v => {const pointInGrid = this.generatePointsWithinGrid(v)result = result.concat(this.filterPointWithinPolygon(pointInGrid, v))})return result}
}

使用起来就两行,入参主要有三个

参数 介绍
pointGap 每个点之间的距离
gapUnits 每个点距离的单位,可选为’degrees’
polyline 区域范围形成的一个多边形数据,经度和纬度以 , 隔开,每组经纬度以 ; 隔开 ,不同的多边形区域,以 **

如果是用的高德地图API拿到的多边形数据,那么就不用处理,直接传入即可。

const pta = new PointsInArea({ polyline: data, pointGap: '1' })
const result = pta.run()

这里ployline数据传入从高德地图api获得的数据即可。

获取的点位效果如图:

仓库地址

仓库地址 points-in-area 如果对你有帮助的话,还请各位不要吝啬您的star

获取指定区域内的坐标点位,在线查看经纬坐标相关推荐

  1. 高德地图获取可视区域内四角坐标(东北,东南,西南,西北)

    高德地图获取可视区域内四角坐标(东北,东南,西南,西北) 场景:当需要实现查询某坐标区域内的所有共享单车,那么常规操作就是把所选区域内的左上和右下两点经纬度给到后端.获取方法如下: // 初始化地图m ...

  2. java图像处理-(指定区域内)灰度化、透明化(alpha通道)处理

    java图像处理-(指定区域内)灰度化.透明化(alpha通道)处理 2016年07月25日 21:23:16 阅读数:3944 近日在一家小公司实习,老板要求我写一个图形编辑器,其中涉及到用java ...

  3. iOS-自定义相机拍照获取指定区域图片

    功能并不难,之所以被难住是因为把问题想复杂了,记录一下. 自定义的相机拍照使用AVCaptureSession,获取指定区域图片使用图片裁切功能,重点在于不能直接使用AVCaptureSession获 ...

  4. oracle获取指定日期内工作日的天数或节假日天数

    oracle 获取指定日期内工作日的天数 不必拘泥,可以反向思考 获取这段时期内周六日的天数,再用总天数减去周六日的天数,得到我们想要的 获取时间段内 所有日期 select to_date('202 ...

  5. 【JavaScript】如何获取指定范围内的随机数

    如何获取指定范围内的随机数,要知道,JavaScript中用Math.random()生成随机小数,可以利用这一点,加上指定范围的处理,就可以做成自己想要的随机数 文章目录 1. 函数介绍 2. 使用 ...

  6. Python项目实践(一)去除PDF指定区域内的水印

    目录 前言 对比图(水印去除前后) 一.原理 二.代码实现 三.使用教程 1. 文件夹目录(pic和res文件夹需提前创建好) 2. 执行第一步代码(注释掉其他代码,以下同理) 3. 执行第二步代码 ...

  7. 【教程】Spire.PDF教程:C# 从 PDF 页面的指定区域内提取文本

    Spire.PDF是一个专业的PDF组件,能够独立地创建.编写.编辑.操作和阅读PDF文件,支持 .NET.Java.WPF和Silverlight. [下载Spire.PDF最新试用版] 有时我们可 ...

  8. Python获取指定时间范围内的工作日、假日日、法定节假日

    1 导库 import chinese_calendar import datetime import pandas as pd 2 指定时间范围 start_time = datetime.date ...

  9. python获取图片某像素点位置_如何在python中获取图像中指定区域内的所有像素坐标?...

    假设是矩形,可以使用^{}为左上角和右下角之间的点生成坐标矩阵.在X, Y = np.mgrid[xmin:xmax, ymin:ymax] 并用 ^{pr2}$ 编辑:任意形状 正如马克·塞切尔指出 ...

最新文章

  1. matlab中cell用法
  2. C#开发APP,ToolBar控件在Smobiler中的使用方式【附案例源码】——Smobiler移动开发平台...
  3. LeetCode-数组-189. 旋转数组
  4. EOS账户系统(4)账户权限分级
  5. linux下使用C++操作mysql
  6. Centos 7编译安装 LAMP 环境
  7. android调webview的方法,Android中的WebView详解
  8. nagios的check_tcp,check_udp插件的使用文档
  9. 花店橱窗布置问题(FLOWER)
  10. 不存在理想中的那种单元测试
  11. Docker概述 官方文档 Google翻译
  12. Vivado 查看HLS生成IP的资源和最高频率
  13. 计算机wifi怎么打不开,电脑的wifi打不开了怎么办
  14. 《排列字母》把字符串中的字母按其在字母表中的顺序排列。
  15. 乔布斯一个人的世界(一)
  16. [Linux](小白须知)超级用户、普通用户、系统管理员怎么区分
  17. windows11 显示文件后缀名
  18. UML类图以及常用集合
  19. puppy linux 版本,Puppy Linux 8.0 发布,轻量级发行版
  20. Virtualbox Linux 主机与虚拟机复制粘贴

热门文章

  1. Android 9.0 flash播放器播放swf源码讲解
  2. Excel应用技巧:不规则合并单元格之批量填充序列
  3. VUE element ui 动态合并单元格问题
  4. 程序员走进偶像剧变身男主,网友:我服!
  5. 用excel解蓝桥杯(2018年第九届蓝桥杯A组)
  6. Blender雕刻模块:2.81新功能遮罩提取(Mask Extract)
  7. 中国石油大学华东2013-2014-1c语言a卷_答案,中国石油大学(华东)2012—2013学年第二学期期中A卷试卷答案...
  8. UltraEdit 文本代码程序编辑器免费版下载安装教程
  9. 2023年证券、基金、银行从业资格证考试计划
  10. OpenCV开发笔记(四十五):红胖子8分钟带你深入了解重映射(图文并茂+浅显易懂+程序源码)