2017-04-26 44 views
0

我們的程序將空間數據存儲爲MongoDB中的WGS84(經度,緯度)。但是,我們的程序與之交互的組件使用UTM。由於即使使用庫代碼,轉換數據也不太準確(精度損失並不重要),因此我們正在考慮將數據存儲爲WGS84和UTM以消除轉換。我知道MongoDB在內部使用WGS84進行空間查詢,所以存儲UTM純粹是出於速度和準確性原因(即如果所述組件從我們的數據庫查詢空間數據,我們可以很容易地以UTM方式返回它)。我應該如何在MongoDB中存儲兩個不同測量單位的相同數據?

這是一個好主意,還是有更好的選擇?我擔心數據的完整性可能會因數據重複而受到損害(如果WGS84數據發生變化,則UTM也必須更新,反之亦然)。

回答

0

如果可用庫對於您的用例太不準確,我建議將longitudelatitude存儲爲數組,其中包含2個值 - 一個用於WGS84,一個用於UTM。

這種方法的優點是它允許您爲那些可以存儲爲數組對象成員的一部分的度量定義一些其他屬性。

此外,因爲這將是一個有界數組,它將不會影響查詢性能。

{ 
    ... 
    longitude: [ 
     { 
      format: "WGS84", 
      value: 123456 
     }, 
     { 
      format: "UTM", 
      value: 654321 
     } 
    ], 
    latitude: [ 
     { 
      format: "WGS84", 
      value: 123456 
     }, 
     { 
      format: "UTM", 
      value: 654321 
     } 
    ], 
    ... 
} 

否則,您可以將它們存儲爲具有2個屬性的對象 - 每個格式對應一個。

{ 
    ... 
    longitude: { 
     WGS84: 123456, 
     UTM: 654321 
    }, 
    latitude: { 
     WGS84: 123456, 
     UTM: 654321 
    }, 
    ... 
} 

然而,正如你提到的,在數據​​完整性方面,保持值保持同步的責任落在現在的應用程序組件下。

因此,您需要在應用程序中實現某種規則引擎,以便在其中一個值發生更改時準確更新這兩個值。

相關問題