Google S2 library的使用(C++)

https://smithnote.com/programing/google_s2/ 关于google s2算法的详细的介绍有一篇很好的中文博客,可以浏览《高效的多维空间点索引算法》。这里就只介绍google s2库的具体使用 安装 直接源码编译安装,步骤如下 预先了解的概念 地球(S2Earth): 地球的表示类,它提供了一系列对于S2Point, S2Latlng等相关的操作,例如两个坐标点之间的 距离,将距离装换为S2ChorAngle,方便其他接口调用 点(S2Point): 三维空间中的某个点的表示class, 由地球上的经纬度转换成实际的三维坐标而来 角度(S1Angle): 表示一维角度,具体的理解就如同经纬度中的其中一个维度,如经度或纬度 弦角(S1ChordAngle): 相较于一维角度,弦角是球体上两个点分别与球心连线的夹角,取值范围[0, 180] 坐标(S2LatLng): 地球经纬度坐标的表示class, 其内部由两个S1Angle表示 区域(S2Region): 地球上的某个区域的base class表示, 实际的区域都继承于它 矩形区域(S2LatLngRect):由两个坐标或者两个点初始化。具体就是由一个最小经纬度p1(矩形左下角的坐标) 和最大经纬度坐标p2(矩形右上角的坐标)初始化,所以要保证-90 <=p1.lat <= p2.lat <= 90,而经度则无要求 圆形区域(S2Cap):由一个圆心坐标和一段半径距离初始化(也可以是一个角度), 在球体上就是一个帽盖形状 闭环多边形(S2Loop): 闭环多边形, 由给定一系列坐标点的列表的顺序形成一个闭环,也就是说最后的连线的终点就是起点, 这个要注意的是多边形内部是定义在连线方向的左边 线形区域(S2Polyline):由给定的点连成的直线组成 多个闭环区域(S2Polygon): 由多个S2Loop组成 点索引(S2PointIndex): 点的索引实现类,是个模板类,是为了方便的添加每个point的额外信息。 它主要跟他相关的查询接口类来配合实现对索引的操作。 形状(S2Shape): 并不是具体指额某个形状,它表示同一维度的几何形集合,例如point的集合,闭环多边形的集合, 线形区域等, 那些几何形都实现了S2Shape的接口, 例如S2Loop::Shape, S2Polygon::Shape, S2Polyline::Shape等 形状索引(S2ShapeIndex): shape索引抽象class, 它跟一系列其他相关的类配合来实现对索引的操作 …

高效的多维空间点索引算法 — Geohash 和 Google S2

https://halfrost.com/go_spatial_search/ 引 每天我们晚上加班回家,可能都会用到滴滴或者共享单车。打开 app 会看到如下的界面: app 界面上会显示出自己附近一个范围内可用的出租车或者共享单车。假设地图上会显示以自己为圆心,5公里为半径,这个范围内的车。如何实现呢?最直观的想法就是去数据库里面查表,计算并查询车距离用户小于等于5公里的,筛选出来,把数据返回给客户端。 这种做法比较笨,一般也不会这么做。为什么呢?因为这种做法需要对整个表里面的每一项都计算一次相对距离。太耗时了。既然数据量太大,我们就需要分而治之。那么就会想到把地图分块。这样即使每一块里面的每条数据都计算一次相对距离,也比之前全表都计算一次要快很多。 我们也都知道,现在用的比较多的数据库 MySQL、PostgreSQL 都原生支持 B+ 树。这种数据结构能高效的查询。地图分块的过程其实就是一种添加索引的过程,如果能想到一个办法,把地图上的点添加一个合适的索引,并且能够排序,那么就可以利用类似二分查找的方法进行快速查询。 问题就来了,地图上的点是二维的,有经度和纬度,这如何索引呢?如果只针对其中的一个维度,经度或者纬度进行搜索,那搜出来一遍以后还要进行二次搜索。那要是更高维度呢?三维。可能有人会说可以设置维度的优先级,比如拼接一个联合键,那在三维空间中,x,y,z 谁的优先级高呢?设置优先级好像并不是很合理。 本篇文章就来介绍2种比较通用的空间点索引算法。 一. GeoHash 算法 1. Geohash 算法简介 Geohash 是一种地理编码,由 Gustavo Niemeyer 发明的。它是一种分级的数据结构,把空间划分为网格。Geohash 属于空间填充曲线中的 Z 阶曲线(Z-order curve)的实际应用。 何为 Z 阶曲线? 上图就是 Z 阶曲线。这个曲线比较简单,生成它也比较容易,只需要把每个 Z 首尾相连即可。 Z 阶曲线同样可以扩展到三维空间。只要 Z 形状足够小并且足够密,也能填满整个三维空间。 说到这里可能读者依旧一头雾水,不知道 Geohash 和 Z 曲线究竟有啥关系?其实 Geohash算法 的理论基础就是基于 Z 曲线的生成原理。继续说回 Geohash。 Geohash 能够提供任意精度的分段级别。一般分级从 1-12 级。 …

Error cs0012 the type ‘object’ is defined in an assembly that is not referenced. you must add a reference to assembly ‘netstandard, version=2.0.0.0, culture=neutral, publickeytoken=cc7b13ffcd2ddd51’.

Error cs0012 the type ‘object’ is defined in an assembly that is not referenced. you must add a reference to assembly ‘netstandard, version=2.0.0.0, culture=neutral, publickeytoken=cc7b13ffcd2ddd51’. Solve: Add <Reference Include=”netstandard” /> into .csproj file.

git-ssh 配置和使用

1、设置Git的user name和email:(如果是第一次的话) 2、生成密钥 连续3个回车。如果不需要密码的话。最后得到了两个文件:id_rsa和id_rsa.pub。 如果不是第一次,就选择overwrite. 3、添加密钥到ssh-agent 确保 ssh-agent 是可用的。ssh-agent是一种控制用来保存公钥身份验证所使用的私钥的程序,其实ssh-agent就是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程。 添加生成的 SSH key 到 ssh-agent。 4、登陆Github, 添加 ssh 。 把id_rsa.pub文件里的内容复制到Github 5、测试: 你将会看到: 选择 yes 如果看到Hi后面是你的用户名,就说明成功了。 6、修改.git文件夹下config中的url。 修改前 修改后 PS: 使用https协议每次都需要输入Github用户名密码; 使用git协议则使用ssh认证密码.

SqlServer导入超大sql脚本

场景描述 在往sqlserver数据库运行sql文件导入数据时,对于小的sql文件,直接在SQL Server Management Studio里打开执行就行了,但有几个表的数据量非常大,运行sql文件时提示内存不足。 参考解决方法 使用自带sqlcmd命令工具进行执行导入。 1、如我使用的是sqlserver2008,是安装在d盘的,打开命令行,进入Binn目录: cd D:\Program Files\Microsoft SQL Server\100\Tools\Binn 1 2、输入以下命令 sqlcmd -S [server name] -U [username] -P [password] -d [database name] -i C:\sqlserver\script.sql 1 说明: -S:数据库服务器地址,我这里是本机直接用localhost -U:用户名 -P:密码 -d:数据库名

IIS集中化管理与编程REST API

一、简介 Microsoft IIS Administration 微软提供,管理IIS配置的REST API 和集中化IIS管理WEB UI。 l  支持绝大部分IIS配置项管理 l  支持管理远程IIS,实现集中化IIS配置管理。 l  支持REST API,方便集成到自研系统。 l  支持IIS配置访问安全性设置 Github:https://github.com/Microsoft/IIS.Administration 微软官网使用文档:https://docs.microsoft.com/en-us/IIS-Administration/ 二、安装 下载:https://docs.microsoft.com/en-us/IIS-Administration/getting-started 环境要求: l  操作系统Windows7版本及以上版本 l  IIS Administration API 依赖.NET Core,在安装IIS Administration安装包时,会按需自动安装 安装完后: Windows服务名:Microsoft IIS Administration Microsoft IIS Administration API地址:https://localhost:55539 (可以使用IP地址访问,但是会遇到权限问题,修改权限的方法在下面“修改配置文件”中介绍) Web UI管理地址:https://manage.iis.net/get 获取AccessToken 进入https://localhost:55539/connect,创建一个Access Key 拿到accesstoken后 l  通过地址:https://localhost:55539/connect 进入api展示界面(https://localhost:55539/#/api),查看可在自己的程序中通过rest api 访问iis信息 l  通过地址:https://manage.iis.net/connect 进入UI管理界面 三、IIS Administration配置文件 1)  配置文件路径:%SystemDrive%\Program Files\IIS Administration\<version>\Microsoft.IIS.Administration\config\** 2)  修改配置文件后需要重启windows服务(Microsoft IIS Administration) 3)  appsettings.json 配置:安全性、日志、audit(审计)、cors(跨域)、访问用户、只读等,详细查看文档。 4)  modules.json配置:启用或禁用IIS配置模块 配置修改示例 示例一、访问https://远程IP地址:55539/connect ,出现windows登录验证框 修改点:修改appsettings.json,将”require_windows_authentication”设置为 false 示例二、编码访问IIS Administration REST API 报401没有权限访问 …

SQL Server直接执行.sql文件

SQL Server是否可以像Oracle那样直接执行.sql文件,在cmd窗口中执行如下命令执行Sql文件:     osql -S 127.0.0.1 -U sa -P sa -i C:\Tab\script.sql     简单说明:osql为SQL Server的命令,要在cmd中执行该命令,一般安装完SQL Server后该命令对应的路径会自动添加到系统环境变量中。 -S 表示要连接的数据库服务器 -U表示登录的用户ID,-P表示登录密码 -i表示要执行的脚本文件路径