데이터 베이스 MySQL 튜토리얼 用postgreSQL做基于地理位置的app

用postgreSQL做基于地理位置的app

Jun 07, 2016 pm 04:20 PM
postgresql 지리적 위치 기반으로

前言:项目中用到了postgreSQL中的earthdistance()函数功能计算地球上两点之间的距离,中文的资料太少了,我找到了一篇英文的、讲的很好的文章 ,特此翻译,希望能够帮助到以后用到earthdistance的同学。 一、两种可用的选择 当我们想用Postgres作为GEO函数

   前言:项目中用到了postgreSQL中的earthdistance()函数功能计算地球上两点之间的距离,中文的资料太少了,我找到了一篇英文的、讲的很好的文章 ,特此翻译,希望能够帮助到以后用到earthdistance的同学。

  一、两种可用的选择

  当我们想用Postgres作为GEO函数使用时,我们通常有2中选择(据我所知):

  1.PostGIS: 为postgreSQL提供了高级GEO函数功能。我用了它一段时间,但是它对于我的需求来说太笨重了。

  2.Cube和Earthdistance: 这两个拓展为轻量级的Geo关系实体提供了简单、快速的实现方法。

  二、为什么在数据库服务器端做计算

  这是件非常明显的事。服务器存储了所有的数据,服务器拓展是用C/C++实现的,非常快。为数据表做索引也能加快计算速度。

  三、使用我的选择--Cube and EarthDistance

  作为开始,你应该先建一个数据库(我想你知道该怎么做),然后使它们能用我们的架构。 执行:

?

1

2

CREATE EXTENSION cube;

CREATE EXTENSION earthdistance;

  上面的命令创建了大约40个函数,以后我们做数据查询的时候就可以用了。

  在我们的例子中,我创建了名为events的表,字段有:id(serial), name(varchar 255), lat(double), lng(double)。(别忘了~~)

  四、计算2个坐标之间的距离

  计算2个坐标之间的距离,我们要用到earth_distance(ll_to_earth($latlngcube), ll_to_earth($latlng_cube))这个函数。 earth_distance()函数接受2组坐标值,返回值一个以米为单位的的数值。这能用于很多场景,比如根据某一位置找到离其最近的发生的新闻事件的列表。

  【译者注】这里要提下几个重要的函数:(参考:)

  Table F-3. Cube-based earthdistance functions

Function Returns Description

earth() float8 Returns the assumed radius of the Earth.

sec_to_gc(float8) float8 Converts the normal straight line (secant) distance between between two points on the surface of the Earth to the great circle distance between them.

gc_to_sec(float8) float8 Converts the great circle distance between two points on the surface of the Earth to the normal straight line (secant) distance between them.

ll_to_earth(float8, float8) earth Returns the location of a point on the surface of the Earth given its latitude (argument 1) and longitude (argument 2) in degrees.

latitude(earth) float8 Returns the latitude in degrees of a point on the surface of the Earth.

longitude(earth) float8 Returns the longitude in degrees of a point on the surface of the Earth.

earth_distance(earth, earth) float8 Returns the great circle distance between two points on the surface of the Earth.

earth_box(earth, float8) cube Returns a box suitable for an indexed search using the cube @> operator for points within a given great circle distance of a location. Some points in this box are further than the specified great circle distance from the location, so a second check using earth_distance should be included in the query.

  数据库的操作可能就像下面这样:

?

1

2

3

SELECT events.id events.name, eaerthdiatance(ll_to_earth({currentuserlat}, {currentuserlng}), llto_earth(events.lat, events.lng))

as distancefromcurrentlocation FROM events

ORDER BY distancefromcurretnlocation ASC;

  这将给我们一个很nice的新闻事件列表,按他们的离我们当前位置的距离由近到远排序。第一个是离我们最近的。

  五、找到某个半径范围内的记录

  Cube和Earthdiatance拓展提供的另一个伟大的函数是earth_box(ll_to_earch($latlngcub), $radiusinmetres)。 这个函数通过简单的比较就能到找到某个半径范围内的所有记录。它是靠返回2点之间的“大圆距离”实现的。

  【译者注】大圆距离(Great circle disstance)指的是从球面的一点A出发到达球面上另一点B,所经过的最短路径的长度。一般说来,,球面上任意两点A和B都可以与球心确定唯一的大圆,这个大圆被称为黎曼圆,而在大圆上连接这两点的较短的一条弧的长度就是大圆距离。如果想了解更多,请看wiki:大圆距离

  它能用于查询我们城市中所有的新闻事件:

?

1

2

SELECT events.id, events.name FROM events

WHERE earth_box({currentuserlat}, {currentuserlng}, {radiusinmetres}) @> ll_to_earth(events.lat, events.lng);

  这条查询语句仅仅会返回在radius_in_metres指定的半径范围内的记录,非常简单吧!

  六、提高查询速度

  你可能会发现上面的查询有不小的开销。以我的经验,最好对一些字段建立索引。 (下面这条语句假定你又events表, 同时events表有字段lat和lng)

?

1

CREATE INDEX ${nameofindex} on events USING gits(lltoearth(lat, lng));

  七、数据类型

  我的应用比较简单,所以我把经纬度(lat和lng)都设成了double类型。这使得我用Node.js开发起来更加快速,而不用再去自己定制针对GIST类型的解决方案。

  八、就这些!

  很神奇,对么?!?我们仅仅用常用的数据类型(double)就足以去用一些GEO函数创建基于地理位置的社交app(【译者注】知乎上的一个回答)!

  ---------------------------

  英语水平有限,如有翻译不周之处,请您指点!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Douyin IP 위치를 수정하는 방법 Douyin IP 위치를 수정하는 방법 May 04, 2024 pm 04:36 PM

예, 다음과 같이 Douyin IP 위치를 수정할 수 있습니다. Douyin을 열고 프로필을 편집하세요. 도시 정보를 수정하고 표시하려는 도시 또는 지역을 선택하세요. 변경 사항을 적용하려면 로그아웃했다가 다시 로그인하세요.

Amap에는 휴대폰 등록이 필요합니까? Amap에는 휴대폰 등록이 필요합니까? May 05, 2024 pm 05:12 PM

예, 보안, 개인화 서비스 및 계정 관리를 위해 Amap에는 휴대폰 번호 등록이 필요합니다. 등록 단계는 다음과 같습니다: Amap 앱을 열고 "내" 및 "로그인/등록"을 클릭하고 등록할 휴대폰 번호를 선택하고 인증 코드를 받기 위해 휴대폰 번호를 입력하고 등록을 완료하기 위해 비밀번호를 설정합니다.

웨이보에 사진과 동영상을 게시하는 방법 웨이보에 사진과 동영상을 게시하는 방법 May 03, 2024 am 01:15 AM

사진과 동영상을 웨이보에 동시에 게시하는 방법은 다음과 같습니다. 관련되거나 보완적인 사진과 동영상을 선택하세요. Weibo 클라이언트를 열고 게시 버튼을 클릭하세요. "사진 및 비디오" 탭을 선택하세요. 사진 및 동영상을 추가하세요(최대 9개의 사진과 1개의 동영상). 텍스트를 입력하고 관련 정보를 추가하세요. 그냥 출판하세요.

Douyin 추천을 재설정하는 방법은 무엇입니까? 추천을 추천으로 변경하는 방법은 무엇입니까? Douyin 추천을 재설정하는 방법은 무엇입니까? 추천을 추천으로 변경하는 방법은 무엇입니까? May 08, 2024 pm 03:52 PM

짧은 동영상에 초점을 맞춘 소셜 플랫폼인 Douyin의 추천 알고리즘은 핵심 기능 중 하나입니다. 사용자의 관심분야와 행동을 기반으로 관련 동영상 콘텐츠를 추천할 수 있습니다. 때때로 사용자는 자신의 선호도에 더 부합하는 콘텐츠를 얻기 위해 추천 알고리즘을 재설정하기를 원할 수 있습니다. 그렇다면 Douyin 추천을 재설정하는 방법은 무엇입니까? Douyin 추천을 추천으로 변경하는 방법은 무엇입니까? 이 기사에서는 두 가지 질문에 대한 답변을 모두 제공합니다. 1. Douyin 추천을 재설정하는 방법은 무엇입니까? 1. Douyin 앱을 열고 개인 홈페이지에 들어갑니다. 2. 오른쪽 상단에 있는 "설정" 아이콘을 클릭하여 설정 페이지로 들어갑니다. 3. 설정 페이지에서 '권장 관리' 옵션을 찾아 클릭해 들어갑니다. 4. 추천 관리 페이지에서는 귀하의 관심 태그와 관심 선호도를 확인할 수 있습니다. 다른 항목을 선택하거나 선택 취소할 수 있습니다.

TikTok에서 추천 설정을 변경하는 방법 TikTok에서 추천 설정을 변경하는 방법 May 04, 2024 am 12:06 AM

Douyin 추천은 추천 동영상 유형 조정, 관심 있는 제작자 팔로우, 싫어하는 콘텐츠 차단, 동영상 언어 설정, 지리적 위치 제한, 인기 주제 팔로우, 검색/탐색 기록 삭제 등을 포함한 "콘텐츠 기본 설정" 설정을 변경하여 변경할 수 있습니다.

TikTok에서 위치 권한을 수정하는 방법 TikTok에서 위치 권한을 수정하는 방법 May 03, 2024 pm 11:24 PM

Douyin 위치 권한을 수정하는 단계: 1. Douyin 앱을 열고 "나"를 클릭하세요. 2. 오른쪽 상단에 있는 "가로 막대 3개 아이콘"을 클릭하세요. 3. 설정을 선택합니다. 4. "개인정보 설정"을 찾아 클릭하세요. 5. "위치 서비스"를 클릭하세요. 6. 적절하게 타겟팅 허용 또는 사용할 때만 묻기를 선택합니다. 7. 수정 후 Douyin 애플리케이션을 다시 시작해야 적용됩니다.

TikTok 시간대 설정을 변경하는 방법 TikTok 시간대 설정을 변경하는 방법 May 04, 2024 am 01:57 AM

Douyin 시간대 설정은 변경할 수 없으며, 시간대는 현재 지리적 위치를 기준으로 자동으로 설정됩니다.

Honor 휴대폰에서 사진 워터마크를 끄는 방법 소개 Honor 휴대폰에서 사진 워터마크를 끄는 방법 소개 May 08, 2024 pm 01:20 PM

1. 먼저 카메라를 열고 오른쪽 상단에 있는 설정 아이콘을 클릭합니다. 2. 위치정보 및 자동 워터마크 스위치를 끕니다.

See all articles