2010-07-13 2 views
7

나는 MySql으로 Grails 1.3.2를 연구 중이다. 특정 위치의 위도와 경도를 데이터베이스에 저장 한 다음 사용자의 현재 위치를 기준으로 해당 위치의 특정 반경 내에있는 항목을 반환해야합니다. Grails에서 공간 (지리적 위치) 검색을 구현하는 방법은 무엇입니까?

  • 전체 텍스트 검색을 제공, 사용자의 현재 좌표의 주어진 반경에-장소에 대한

    1. 검색 : 그래서, 우리는 기본적으로 다음과 같은 요구 사항이 있습니다. 현재이 항목을 검색 할 수 있습니다.
    2. 사용자의 현재 좌표에서 지정된 반경 내에서 전체 텍스트 검색을 조합하십시오.

    저는 다양한 옵션을 살펴보고이를 구현하기위한 귀하의 의견/제안이 무엇인지 알고 싶었습니다.

    1. 루씬 공간 검색 (http://wiki.apache.org/lucene-java/SpatialSearch) 및 검색

    2. Grails의 SOLR 플러그인 (http://www.grails.org/plugin/solr)와 함께 사용하는 방법을 조사 : 우리가 여기있는 다양한 옵션이 있습니다. 그러나 이것은 도메인 객체를 반환하지 않습니다.

    3. Grails Stitches Plugin (http://www.grails.org/plugin/stitches). 저자 사이트 (http://www.philliprhodes.com/content/stitches-30-seconds)를 제외하고는 많은 문서가 없습니다.

    4. 도메인 클래스의 모든 필드에서 전체 텍스트 색인과 함께 MySql 공간 확장. 우리가이 길로 간다면, 우리는 전혀 검색 할 수 없게 될 것입니다.

    5. 포스트 그레스/최대 절전 모드 - 공간 (http://blog.mollusca.ch/2008/10/4/grails-spatial-data-postgis)과 PostGIS와 통합

    나는이지도를 통합하는 응용 프로그램에서 매우 기본적인 요구 사항이라고 생각합니다.

    그래서이 기능을 구현하는 가장 적절한 방법을 알고 싶습니다.

    감사

  • 답변

    4

    (나는 반경 내에서 행을 찾기 위해 긴/위도를 사용하여 프로토 타입을 만들어,하지만 지금 포기하는 영국에서 사용할 수있는 GridRef 시스템의 찬성) 첫 번째 단계로

    , 계산 된 필드를 기반으로 WHERE 조건을 사용하지 마십시오 (예 : 주어진 좌표 및 행의 좌표에 따른 실제 거리).

    대신,이 시도 :

    1. 반경 = 최대 거리
    2. 이 곡선 경도 라인을 사용하여 주위에 상자를 그립니다 원을 상상해보십시오.
    3. 해당 상자에서 항목을 검색하십시오.

    는 실제로이 의미

    1. 워크 아웃이 정도는 경도 (이 주어진 경도에서 최대 거리를 나타냅니다 위도 몇도 주어진 위도
    2. 작업을 최대 거리를 나타냅니다 얼마나 많은 구형 - 지구 모델을 사용할 때 승수는 고정됩니다). 곳에서 긴> $의 웨스트 사이드와 긴 < $의 이스트 사이드와 위도 < $의 북쪽 블록 및 이것은 당신이 지역을 커버하는 막연한 부분 집합을 얻기 위해 매우 간단한 계산을 할 의미> $ 남쪽

    위도

  • SELECT * 30 실제 서클보다 큰 %. 텍스트 검색도 계산 비용이 많이 들기 때문에 위의 간단한 비교 후 SELECT FROM (하위 쿼리) 또는 텍스트 절을 추가 할 수도 있습니다.

  • 관련 문제