2014-11-29 5 views
1

지리적 참조 데이터를 사용해야하는 애플리케이션을 작성 중이며 MongoDB + Morphia를 사용하고 싶습니다. 응용 프로그램은 스칼라에 있지만 일부 자바 될 필요가있는 경우, 그 나는 사건의 위도 및 경도 나타내는 클래스가 (야호 호환성!)MongoDB/Morphia (Scala 또는 Java)를 사용하여 GeoJSON으로 LatLon 클래스 저장하기

괜찮아 :

class LatLon 
{ 
    @BeanProperty 
    var latDegrees : Double 
    @BeanProperty 
    var lonDegrees : Double 
} 

그것은 매우 아니에요을 흥미 진진한 수업이지만,이 맥락에서 유용합니다.

지금, 나는 위치에 기록 이벤트가 :

class ObservedEvent 
{ 
    @BeanProperty 
    var observation : String = _ 

    @Beanproperty 
    var location : LatLon = _ 
} 

을 지금을, 내가 관찰 된 사건의 t을하고 난 모르핀과 MongoDB를에 저장하고 싶습니다. '위치'는 GeoJson Point로 저장해야 컬렉션 등을 색인 할 수 있습니다. SimpleValueConverter, 어댑터 및 몇 가지 다른 해킹을 시도했지만이 작업을 수행하는 방법을 파악할 수 없었습니다. 그것은 내장 된 것 같은 일반적인 유스 케이스처럼 보입니다. 여기에 대한 대답은 "내장되어 있습니다!"[여기]를보십시오. 이 경우, 나는 그것을 발견하지 않았습니다 :(

감사

+0

그냥 간단한 포인트, 내가 작업의 유형을 달성하기 위해 중포 기지와 플러그인 GeoFire를 사용하여 입력 포인트와 함께 유지 될 포인트를 생성하는 모르핀의 GeoJson 클래스를 사용할 수 있습니다. Firebase에서 기본 계획을 수립하고 서버에서 원하는 모든 것을 관리하십시오. 그것 좀 봐! –

+0

GeoJson 포인트의 구조를 반영하도록 LatLon 클래스를 변경하지 않는 이유는 무엇입니까? – pintxo

답변

1

Geojson 형식이 엄격하게 필요하지 않습니다;!. 인덱스가 몽고에서 아무 키나 가능, 그래서 할 수 있습니다 단순히 인덱스 latDegrees 및 lonDegrees 키 플러스 geojson 형식은 장황하고 db 크기를 늘릴 것입니다. 약 1 년 동안 작업했기 때문에 매핑에 문제가 없었습니다.

다양하고 멋진 $ near를 사용하려면 Geojson이 필요합니다. $ geo-spatial queries 또는 $ geoNear aggregation 이내. 그러나 사용법을 계획하지 않으면 imho를 괴롭히지 마십시오.

이제 관찰 된 이벤트가 많아서 Morphia와 함께 MongoDB에 저장하고 싶습니다. 당신이 당신의 latDegrees에서 지리적 데이터를 변환해야하는 경우 그래서 인덱스 컬렉션 등

때, 예상 geojson 형식으로 lonDegrees 형식이를 실행할 수있는 '위치'은 GeoJson 포인트로 저장한다 쉘 스크립트. 이는 일회성 작업으로 가장 좋습니다. 컬렉션은 DB 내에서 '테이블'의 이름입니다

db.COLLECTION.find().forEach(function(doc) { 
    // Create a geojson point using the lon and lat found in each doc. 
    var location = {"type":"Point", "coordinates":[doc.lonDegrees, doc.latDegrees}; 
    printjson ("Location is " + location); 
    // update the collection with geojson doc and unset the old one  
    db.COLLECTION.update({"_id":doc._id},{$set:{"loc":location}, $unset : {"lonDegrees", "latDegrees"} }); 
}) 
  • .
  • geojson은 lon, lat 시퀀스 대 일반적인 lat, lon 규칙의 데이터가 필요합니다.

주의하십시오. 위의 스크립트는 geojson을 설정하고 단 한 번의 작업으로 이전 형식을 설정 해제합니다. 업데이트를 항상 새로운 컬렉션에서 insert ---로 바꾸면 언제든지 새 컬렉션을 만들 수 있습니다. 다음은 귀하의 데이터를 유지하고 동일한 DB에 새로운 컬렉션을 만듭니다.

db.NEW_COLLECTION_NAME.insert(doc}; 
    db.NEW_COLLECTION_NAME.update({"_id":doc._id},{$set:{"loc":location}, $unset : {"lonDegrees", "latDegrees"} }); 

mongo 셸을 사용하여 명령 줄에서 스크립트를 실행하십시오.내가 핵심 문제와 함께 당신을 도울 수 없습니다

mongo DATABASE filename.js 

는, 그럼에도 불구하고, 나는 반응성 또는 악성 몽고 드라이버에 BSON 핸들러에 초점을 제안 - 개인 코드 연장에 반대했다. 그 청소부와 다른 사람들은 당신의 일을 사용할 수 있습니다. 예는 일반적인 문제이며 Mongo 드라이버에 있어야합니다.

즉. 이 스칼라 sample을 보면 사용법이나 BSONDocument를 볼 수 있습니다. 2 플로트 배열을 필요한 geojson 형식으로 직렬화/마샬링하는 BSONLatLonDocument를 만들 수 있습니다.

+0

의견을 주셔서 감사합니다. 필자의 경우 필자는 지리 정보 색인을 필요로하므로 $를 사용할 수 있고 다른 멋진 쿼리를 사용할 수있다. 내가 링크 된 샘플을 확인해 보겠습니다. – fbl

1

자바에서 간단한 GeoJSON을 생성하고 싶었고 GeoJSON-POJO을 찾았습니다.

빠른 구현 및 매우 간단합니다.

  1. GeoJSON-POJO를 새로운 종속 항목으로 추가하십시오.
  2. 데이터로 java 객체를 빌드하십시오.
  3. 직렬화를 위해 개체를 Jackson으로 보냅니다.

이 솔루션은 다양한 방법으로 최적화 될 수 있다고 확신합니다. 그러나이 기능이 더 적은 인력으로 완료 될 수 있을지는 의문입니다. 나는 약 10 분 만에 서버의 임의의 데이터에서 클라이언트 브라우저 맵 (leafletjs)에 표시된 GeoJSON으로 갔다. 그 MongoDB를 또는 모르핀에 도움이되지 않는 경우

죄송합니다 ... 그것은 가치가 무엇인지, 모르핀 0.110 크게 지리적 지원을 개선 할 경우

+0

감사합니다. 도움이 될지 확인하기 위해이 부분을 살펴 보겠습니다. – fbl

0

. 소나타 스냅 샷 저장소에는 스냅 샷 빌드가 있습니다.

0

당신은 몽고 DB를