我们将使用NestJs和Redis来进行演示。NestJs是一个用于构建服务器端应用程序的NodeJs框架。我们将在该项目的服务器端使用它。...安装其他依赖 安装以下依赖项: npm i typeorm @nestjs/typeorm dotenv @nestjs/cache-manager cache-manager cache-manager-redis-store...typeorm @nestjs/typeorm :由于我们使用PostgreSQL,我们需要它作为我们的对象关系模型。 运行我们的服务器 运行下面的命令来启动我们的服务器。...在 src 文件夹内,创建一个名为 entities 的文件夹,并在其中创建一个文件 user.ts 。然后,在这个新文件中添加以下代码。...} from "@nestjs/typeorm"; import { Repository } from "typeorm"; export type TUser = { id?
在这篇文章中,向你展示是如何设置大部分 Nest.js 项目的,我们将在一个简单的 Node.js API 上工作,并使用 PostgreSQL 数据库作为数据存储,并围绕它设置一些工具,使开发更容易上手...让我们使用预构建的 NestJS-to-TypeORM 模块为我们的项目添加 TypeORM 支持。...您可以像这样添加所需的模块: npm install --save @nestjs/typeorm typeorm pg 配置管理 我们可以在 Nest.js 中配置 TypeORM 连接到哪个数据库服务器...因此,您在代码中更改了实体类, typeORM 会为你自动同步字段, 但是,一旦您的数据库中有实际数据,后期打算修改字段类型或其他操作时,TypeORM 将通过删除并重新创建数据库表来更改数据库,这意味着你极有可能丢失了表内的数据...您只需安装: npm install --save @nestjs/swagger swagger-ui-express 并在 main.ts 中添加这几行 // main.ts asyncfunction
文章目录 前情概要 在使用nodejs开发过程中,刚好碰到需要做一个小工具,需要用到数据库存储功能。而我又比较懒,一个小功能不想搞一个nodejs项目,又搞一个后端项目。...经过后端这么多年的脚手架工具熏陶,实在懒得写这些没营养的简单增删改查sql语句了。...比如mongodb如何映射复杂对象,关系型数据怎么弄级联删除之类的功能 使用总结 mysql、sqlite、mongodb3个数据库下都使用过,使用感觉虽然没有后端的orm那么强大,但是在nodejs领域内...Works in NodeJS, Browser, Ionic, Cordova and Electron platforms. remark: TypeORM is highly influenced...给国际友人点赞!
以目标点为圆心,半径为radius的圆内 的元素。...不是不可以实现: 在关系型数据库内存储每个地点的详细信息,Redis 内的 member 存储每个地点在关系型数据库中的主键 ID,查询到地点的 ID 后,再去取地点的详细信息来过滤。...2dsphere 索引支持查询在一个类地球的球面上进行几何计算,以GeoJSON对象或者普通坐标对的方式存储数据。...以下是一个典型的查询语句(查询跟目标点 3000米 内的地点名称和距离): SELECT id, name, st_astext(loc), ST_Distance(loc, ST_GeographyFromText...参考:MySQL Blog - mysql对GIS空间数据的支持 总结 我以 126万 poi 数据进行了测试,查询范围 3km 内的点(最多取200条)。
: 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象...; GEORADIUSBYMEMBER: 以给定的位置对象为中心,返回与其距离不超过给定最大距离的所有位置对象。...进一步找出与中心点距离小于输入半径的对象,进行返回。 直接描述不太好理解,我们通过如下两张图在对算法进行简单的演示: ? ?...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)) 其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。
GEORADIUS:以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象。...GEORADIUSBYMEMBER:以给定的位置对象为中心,返回与其距离不超过给定最大距离的所有位置对象。...进一步找出与中心点距离小于输入半径的对象,进行返回。 直接描述不太好理解,我们通过如下两张图再对算法进行简单的演示: ?...再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点(红点)。 算法分析 为什么要用这种算法策略进行查询,或者说这种策略的优势在哪,让我们以问答的方式进行分析说明。...其中 N 为指定半径范围内的位置元素数量,而 M 则是被九宫格圈住计算距离的元素的数量。 结合 Redis 本身基于内存的存储特性,在实际使用过程中有非常高的运行效率。
: 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象;...GEORADIUSBYMEMBER: 以给定的位置对象为中心,返回与其距离不超过给定最大距离的所有位置对象。...进一步找出与中心点距离小于输入半径的对象,进行返回。 直接描述不太好理解,我们通过如下两张图在对算法进行简单的演示: ? ?...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)),其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。
: 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象;...GEORADIUSBYMEMBER: 以给定的位置对象为中心,返回与其距离不超过给定最大距离的所有位置对象。...进一步找出与中心点距离小于输入半径的对象,进行返回。 直接描述不太好理解,我们通过如下两张图在对算法进行简单的演示: ? ?...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)) 其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。
: 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象;...GEORADIUSBYMEMBER: 以给定的位置对象为中心,返回与其距离不超过给定最大距离的所有位置对象。...进一步找出与中心点距离小于输入半径的对象,进行返回。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)) 其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。
: 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象;...GEORADIUSBYMEMBER: 以给定的位置对象为中心,返回与其距离不超过给定最大距离的所有位置对象。...进一步找出与中心点距离小于输入半径的对象,进行返回。 直接描述不太好理解,我们通过如下两张图在对算法进行简单的演示: ? georadius ?...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)),其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。
: 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象;...GEORADIUSBYMEMBER: 以给定的位置对象为中心,返回与其距离不超过给定最大距离的所有位置对象。...,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象。...进一步找出与中心点距离小于输入半径的对象,进行返回。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点
难抵极算法 难抵极(Pole of inaccessibility / PIA)[1]顾名思义,就是从海岸线出发大陆上最难到达的点。直观上来看就是陆地上距离海岸线最远的点(下图的红点)。...从几何角度看就是以形状内的各个点为圆心作圆,这些圆不能与边界(海岸线)相交,以难抵极为圆心的圆半径最大。要注意难抵极和 centroid几何中心不是一个概念。 ?...核心思路是迭代计算候选区域(经纬度),平均分成 21 * 21 个候选点,分别计算到海岸线的最大距离,然后以该点为中心,以 ? 比例缩小得到新的区域。...按照该有向距离排序,将网格加入优先级队列,同时计算该网格内的最大距离 max = dist + radius 其中radius = cell_size * sqrt(2) / 2 如果当前网格有向距离比之前最佳网格更大...return [bestCell.x, bestCell.y]; } 现在我们解决了给定多边形中找到锚点的问题,但是 GeoJSON 的 Polygon 要素可能由多个子多边形组成(下图中的空洞)
26.1 比较谓词 下列比较谓词,枚举了用于索引查询并在上面的示例中使用: eq (equal) neq (not equal) gt (greater than) gte (greater...textPrefix:如果字符串值以给定的查询字符串开头 textRegex:如果字符串值与给定的正则表达式完全匹配 textFuzzy:如果字符串值类似于给定的查询字符串(基于Levenshtein...编辑距离) 有关全文和字符串搜索的更多信息,请参见第24.1节“全文搜索”。...50km内的所有place g.E().has("place", geoWithin(Geoshape.circle(37.97, 23.72, 50))) // 4) Find all edges...26.6 地理位置数据类型 Geoshape数据类型支持 :点,圆,框,线,多边形,多点,多线和多边形。 索引后端目前支持索引:点,圆,框,线,多边形,多点, 多线,多边形和几何集合。
1 比较谓词 下列比较谓词,枚举了用于索引查询并在上面的示例中使用: eq (equal) neq (not equal) gt (greater than) gte (greater...textPrefix:如果字符串值以给定的查询字符串开头 textRegex:如果字符串值与给定的正则表达式完全匹配 textFuzzy:如果字符串值类似于给定的查询字符串(基于Levenshtein...编辑距离) 有关全文和字符串搜索的更多信息,请参见第24.1节“全文搜索”。...50km内的所有place g.E().has("place", geoWithin(Geoshape.circle(37.97, 23.72, 50))) // 4) Find all edges...6 地理位置数据类型 Geoshape数据类型支持 :点,圆,框,线,多边形,多点,多线和多边形。 索引后端目前支持索引:点,圆,框,线,多边形,多点, 多线,多边形和几何集合。
领取专属 10元无门槛券
手把手带您无忧上云