2014-12-23 73 views
0

我有一個類型爲(com.vividsolutions.jts.geom.Geometry)的幾何對象。它目前處於經緯度的形式,我想翻轉座標,使其經度緯度,以便我可以在MongoDB中使用GeoJSON格式。如何交換jts.geom.Geometry對象從Lat,Long到Long,Lat的座標JTS

我看到的約束是: a)我想翻轉座標的輸入是幾何對象。 b)Geometry對象將是Polygon類型或Multipolygon。 c)我想翻轉之前的類型投影到多邊形/ multipolygon

我試過geo.reverse(),但它不起作用。

以及,我試過使用: CRSAuthorityFactory factory = CRS.getAuthorityFactory(true); CoordinateReferenceSystem crs = factory.createCoordinateReferenceSystem(「EPSG:4326」);

而另一種選擇,我沒有看到它的工作。

謝謝!這個

回答

1

一個潛在的解決方案是擴展類,以提供額外的功能,要麼輸出你以某種便捷的方式所需要的數據:

public Coordinate[] getReversedCoordinates(){ 

    Coordinate[] original = this.getCoordinates(); 
    Coordinate[] ret = new Coordinate[original.length]; 

    for(int i =0; i<original.length; i++){ 
     ret[i] = new Coordinate(original[i].x , original[i].y); 
    } 

    return ret; 

} 

或者你可以改變數據的解釋。對於我來說給你一個代碼片段有點困難,因爲我不確定你是如何專門使用這些信息的。

編輯:

一旦你有了逆轉的座標,您可以創建型線性環的重複的幾何圖形。這樣做的一個方法是使用你的工廠使用您的幾何工廠:

GeometryFactory gf = //However this was instantiated; 
Coordinate[] reversedCoordinates = getReversedCoordinates(); 
gf.createLinearRing(reversedCoordinates); 

快樂編碼,並發表評論,如果您有任何問題!

+0

喜!我嘗試了上面的代碼,並有一個進一步的問題,你認爲這將適用於Polygon和Multipolygon形狀嗎?看起來,GeometryFactory gf = new GeometryFactory(),然後gf.toGeometry(...)沒有針對所提議的方法返回的Coordinate []值的輸入。 – aruuuuu

+0

你能澄清你的程序是如何與GeoJSON交互的嗎?它只是傳遞一個多邊形對象嗎?如果是這樣,您可能只想創建一個座標顛倒的重複多邊形。 – Matt

+0

是的座標顛倒的複製多邊形會很好,但我無法創建這個重複的多邊形。我開始使用WKT,將其解析爲幾何,然後成功轉換爲geojson,但座標的順序不正確,geojson需要長,拉特用於mongodb – aruuuuu

2

解決的辦法是Geometry.getCoordinates()給出一個實時的Coordinate []數組。 因此,我可以使用以下命令:

凡myGeometryObject是幾何對象:

Coordinate[] original = myGeometryobject.getCoordinates(); 
for(int i = 0; i < original.length; i++){ 
    Double swapValue = original[i].x; 
    original[i].x = original[i].y; 
    original[i].y = swapValue; 
} 

的協調對象的變化將永久影響的基本幾何體。

3

可以使用CoordinateFilter反轉所有x和y的值在給定的幾何形狀。

private static class InvertCoordinateFilter implements CoordinateFilter { 
    public void filter(Coordinate coord) { 
     double oldX = coord.x; 
     coord.x = coord.y; 
     coord.y = oldX; 
    } 
} 

正是如此。然後應用濾鏡:

// Invert Coordinates since GeoJSON likes them that way 
myGeometryObj.apply(new InvertCoordinateFilter()); 
+1

優秀和優雅的解決方案!這應該是被接受的答案。 – polaretto