Patrząc na rosnący ruch NoSQL i biorąc pod uwagę, że bazy danych takie jak MongoDB oferują nową perspektywę elastycznego przechowywania danych dla GIS. Jaki jest najlepszy sposób przechowywania linii i wielokątów w dokumentach JSON, aby skorzystać z indeksów 2d i funkcji przestrzennych?
24
Odpowiedzi:
GeoJSON tutaj są specyfikacjami .
Oto przykład linii i wielokąta:
źródło
Należy zauważyć, że wsparcie MongoDB dla typów danych przestrzennych jest strasznie złe dla każdego poważnego wyszukiwania przestrzennego, i dotyczy to całej tablicy NoSQL przy ostatnim sprawdzeniu. GeoCouch trochę mi się nie podoba, ale wciąż jest jeszcze wiele do zrobienia.
GeoJSON to fantastyczny format, ale aby skorzystać z ograniczonych (TYLKO PUNKTOWYCH) indeksów przestrzennych w Mongo, potrzebujesz indeksowanej przestrzennie kolekcji zawierającej tylko rekord dla każdego z punktów wielokąta z dodatkową wartością dla identyfikatora rekordu twojego rekord przestrzenny żyjący w innej kolekcji, a następnie użyj kwerendy obwiedni, aby uzyskać identyfikatory rekordów z jednej i wybrać drugą, skutecznie emulując sprzężenie.
Możesz się zhakować i po prostu zrobić rogi ramki granicznej jako punkty dla swoich rekordów, ale wtedy wyszukiwania ramki granicznej mogą się nie powieść, a w sumie wymusza to dość nieefektywne wzorce projektowe i niewłaściwie spycha wszelkie obowiązki na programistę.
Jako implementację referencyjną możesz odnieść się do tego kodu, który został zaprezentowany na tegorocznym szczycie programistów Esri.
W ogóle nie byłem zadowolony ze wsparcia przestrzennego w różnych bazach danych NoSQL. Przechodzą tylko wystarczająco daleko, by wyszukać głupie chmury punktów, co ma sens, biorąc pod uwagę, że większość aplikacji używających tego typu upuszcza pinezki na mapie Google w przeglądarce. PostGIS nadal będzie najlepszym koniem roboczym typu open source do zarządzania informacjami przestrzennymi w dającej się przewidzieć przyszłości.
źródło
To po prostu nieprawda,
„aby skorzystać z indeksów przestrzennych w Mongo, potrzebujesz kolekcji indeksowanej przestrzennie zawierającej tylko zapis dla każdego punktu wielokąta, z dodatkową wartością identyfikatora rekordu rekordu przestrzennego mieszkającego w innej kolekcji, a następnie użyj zapytanie pola ograniczającego, aby uzyskać identyfikatory rekordów z jednej [kolekcji] i wybrać [nagrać dane] z drugiej [kolekcji], skutecznie emulując sprzężenie. ”
Mam dane punktów USGS przechowywane w jednej kolekcji Mongo z rekordami, które wyglądają tak:
Jestem w stanie wykonać zapytania o pola ograniczające na tych danych, które zwracają cały rekord (bez potrzeby kolejnej kolekcji).
Pytanie:
Odpowiedź:
Mongo zapewnia także możliwość wyszukiwania najbliższych sąsiadów, a także wyszukiwania wielokątów. Jest to dobrze udokumentowane na mongodb.org
źródło