16665891 10211247083188500 2291386332147570222 o

다니엘 안쿠타는 다년간 다양한 기술을 사용해 온 소프트웨어 엔지니어입니다. 그는 '파이썬의 선'의 열렬한 팬으로, 코드뿐만 아니라 사생활에도 적용하려고 노력합니다. 트위터에서 그를 만날 수 있습니다: 다니엘_안쿠타

지리공간 쿼리: Python을 사용하여 도시 검색하기

위치 정보는 우리가 컴퓨터와 상호작용하는 거의 모든 측면에서 매일 사용됩니다. 위치를 기반으로 맞춤형 알림을 보내려는 웹사이트, 최단 경로를 보여주는 지도, 방문한 장소를 확인하는 백그라운드에서 실행 중인 작업 등 모든 곳에서 위치 정보가 사용됩니다.

오늘 소개해드릴 내용은 다음과 같습니다. 지리공간 쿼리 를 사용합니다. 지리공간 쿼리 를 사용하면 지리적 위치를 기준으로 문서를 검색할 수 있습니다.

함께 파이썬에서 다음을 사용하는 도구를 작성해 보겠습니다. 지리공간 쿼리 와 함께 Couchbase REST API 그리고 카우치베이스 전체 텍스트 검색를 클릭하면 도시 데이터베이스를 검색하는 데 도움이 됩니다.

전제 조건

종속성

이 문서에서는 다음을 사용했습니다. 카우치베이스 엔터프라이즈 에디션 5.1.0 빌드 5552 및 Python 3.6.4.

이 문서의 스니펫을 실행하려면 pip를 통해 Couchbase 2.3(저는 2.3.4를 사용 중입니다)을 설치해야 합니다.

카우치베이스

  1. 도시 버킷 만들기
  2. 지오포인트 유형의 지리적 필드를 사용하여 도시 검색을 만듭니다. 이에 대한 자세한 내용은 하위 필드 삽입 문서의 일부입니다.

아래 이미지와 같이 표시되어야 합니다:

image 1

Couchbase에 데이터 채우기

우선, 운동에 필요한 데이터가 필요합니다. 이를 위해 다음의 도시 데이터베이스를 사용할 것입니다. geonames.org.

지오네임에는 도시 목록과 우편번호 목록이라는 두 가지 주요 데이터베이스가 있습니다.

모두 국가별로 이름, 좌표, 인구, 시간대, 국가 코드 등의 해당 정보가 포함된 국가별로 그룹화되어 있습니다. 둘 다 CSV 형식입니다.

이 연습에서는 도시 목록을 사용하겠습니다. 저는 PL.zip 에서 원하는 것을 자유롭게 선택할 수 있습니다. 도시 목록.

데이터 모델

도시 클래스는 전체 애플리케이션에서 사용할 단일 도시의 표현이 될 것입니다. 이를 모델로 캡슐화함으로써 API를 통합하고 변경될 수 있는 타사 데이터 소스(예: CSV 파일)에 의존할 필요가 없습니다.

대부분의 스니펫은 (달리 명시되지 않는 한) core.py 파일에 있습니다. 따라서 전체 내용을 덮어쓰지 말고 업데이트(특히 새 가져오기를 추가할 때)하는 것을 잊지 마세요.

 

도시를 처리하는 CSV 반복기

모델 클래스가 있으므로 이제 CSV 파일에서 도시를 읽는 데 도움이 되는 이터레이터를 준비할 차례입니다.

카우치베이스 버킷에 도시 삽입하기

도시를 표현하는 방식을 통합했으며, csv 파일에서 도시를 읽는 이터레이터가 있습니다.

이제 이 데이터를 기본 데이터 소스에 넣을 차례입니다, 카우치베이스.

 

지금까지 작성한 모든 내용이 제대로 작동하는지 확인하기 위해 CSV 콘텐츠를 Couchbase에 로드해 보겠습니다.

 

이 시점에서 Couchbase 버킷에 도시가 로드되어 있어야 합니다. 소요 시간은 선택한 국가에 따라 다릅니다.

도시 검색

데이터로 버킷을 준비했으니 이제 CitiesService로 돌아와서 도시 검색에 도움이 될 몇 가지 방법을 준비할 차례입니다.

하지만 시작하기 전에 다음 메서드를 추가하여 City 클래스를 약간 수정해야 합니다:

이것이 CitiesService에서 구현할 방법의 목록입니다:

  • get_by_name(name, limit=10)은 이름별로 도시를 반환합니다.
  • get_by_coordinates(lat, long), 좌표로 도시를 반환합니다.
  • get_nearest_to_city(city, distance='10', unit='km', limit=10)는 가장 가까운 도시를 반환합니다.

get_by_name

 

get_by_coordinates

 

get_nearest_to_city

이 예제에서 알 수 있듯이 RawQuery와 SortRaw 클래스를 사용했습니다. 안타깝게도 couchbase-python-client API는 최신 Couchbase 및 지역 검색에서 제대로 작동하지 않습니다.

호출 방법

이제 모든 메소드가 준비되었으므로 호출할 수 있습니다!

이제 어디로 가야 하나요?

이 소개를 통해 더 발전된 작업을 할 수 있을 것이라 믿습니다.

몇 가지 할 수 있는 일이 있습니다:

  • 모든 국가의 모든 도시를 로드하려면 성능이 좋지 않을 수 있으므로 데이터를 로드하는 방식을 개선해야 합니다.

core.py의 전체 코드는 다음에서 찾을 수 있습니다. 깃허브 요점.

궁금한 점이 있으면 주저하지 말고 트위터로 문의하세요. 다니엘_안쿠타.

 

이 게시물은 커뮤니티 글쓰기 프로그램

작성자

게시자 Laura Czajkowski, 개발자 커뮤니티 관리자, Couchbase

로라 챠코브스키는 카우치베이스의 Snr. 개발자 커뮤니티 매니저로 카우치베이스의 커뮤니티를 총괄하고 있습니다. 그녀는 월간 개발자 뉴스레터를 담당하고 있습니다.

댓글 남기기