문제

MySQL 공간 데이터 유형에 대해서는 괜찮은 질문이 있었지만 광산은 How에 더 구체적입니다. 베스트 Rails MVC 아키텍처 내에서 그들을 다루기 위해.

관리자 사용자가 새로운 관심 지점을 만들 수있는 입력 양식이 있습니다. 식당을 입력하고 일부 정보를 입력 할 수 있습니다. 또한 인간이 읽을 수있는 위도와 경도를 10 진수 형식으로 입력 할 수 있습니다.

그러나 거리 계산 등의 경우 ... 위치 데이터를 데이터베이스의 공간 지점으로 저장하고 있습니다.

그러므로 내 질문은 레일의 MVC 아키텍처에서 이것을 가장 잘 처리하는 방법입니까?

여기에 내가 가진 몇 가지 아이디어가 있지만 실제로는 깨끗해 보입니다.

  • 전화 : 객체의 새 인스턴스를 취하고 "geomfromtext ( 'point (lat long)')"goodness를 처리하는 원시 SQL 업데이트를 수행하는 After_Filter 메소드. 이것의 문제는 "lat/long"이 내 생성 양식의 텍스트 필드가 될 것이라는 점입니다. 그러나 Clean Form_for : Rails가 제공하는 객체 아키텍처는 실제로 속성이 아니기 때문에 Rails가 제공하는 객체 아키텍처는 MySQL 공간이 아닌 사람의 입력 값.

  • DB에서 트리거를 생성하여 행 삽입 후 해당 행을 업데이트 할 수 있습니까? 나는 전혀 모른다. 그리고 나는이 트리거가 위도/긴 포인트뿐만 아니라 LAT/Long을 저장 한 다음 LAT/Long Decimals로 DB에서 행을 만들지 않는 한,이 트리거가 LAT/Long에 접근 할 수없는 것처럼 보이지 않는다. 그런 다음 창조 후 방아쇠를 실행하여 공간을 업데이트하십시오. LAT/Long 열을 모델에 추가하면 After_Filter로도 할 수 있다고 생각합니다.

다른 아이디어가 있습니까? LAT/Long을 저장하는 것이 거리 계산 등에 공간 지점을 실제로 사용하기 때문에 중복되었다고 생각하지만 ... 인간 편집을 허용하는 경우 필요할 수 있습니다.

도움이 되었습니까?

해결책

체크 아웃 레일 용 Geokit-Rails 플러그인 플로트로 일반 LAT/LNG 열을 사용하여 거리 계산을 수행합니다. Geokit 보석). 그러나 데이터베이스의 지리 공간 능력을 사용하려면 Georuby 포인트 또는 Linestring과 같은 기본 공간 기능을 열 유형으로 지원합니다. 나는이 도움이되기를 바랍니다.

다른 팁

나는 희망이없는 것에 동의합니다. Geokit은 훌륭합니다. 나도 사용합니다.

당신이 직접하고 싶다면, 나는 후_filter를 수행하지만 업데이트 방법을 스레드로 외부화합니다. 그렇게하면 저장하는 동안 느리게 다운되지 않지만 여전히 좋은 코드와 적시에 업데이트 된 열이 있습니다.

트리거는 좋지 않으며 데이터베이스는 데이터를 전달해야하지만 논리를 수행하지 않아야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top