假設我想要計算兩個幾何體之間的距離與JTS,但是中間還有一個我不能穿過的距離(就好像它是一堵牆)。它看起來是這樣的:JTS:兩個幾何體之間的距離繞過另一個在中間
我不知道我怎麼能計算出。
在這種情況下,這些形狀geom1和geom2距離我38.45米,因爲我馬上計算它。但如果我不想越過這條線,我應該把它圍在北面,距離可能會超過70米。
我們可以認爲我們可以有一個多邊形的線或中間的任何東西。
我不知道是否有任何內置的功能在JTS中,或其他一些我可以做的事情。我猜如果有什麼問題,我應該檢查其他解決方法,因爲試圖解決複雜的路由問題是我所不知道的。
這是一段直接使用JTS代碼的距離,它不會考慮中間的幾何圖形。
import org.apache.log4j.Logger;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;
public class distanceTest {
private final static Logger logger = Logger.getLogger("distanceTest");
public static void main(String [] args) {
//Projection : EPSG:32631
// We build one of the geometries on one side
String sGeom1="POLYGON ((299621.3240601513 5721036.003245114, 299600.94820609683 5721085.042327096, 299587.7719688322 5721052.9152064435, 299621.3240601513 5721036.003245114))";
Geometry geom1=distanceTest.buildGeometry(sGeom1);
// We build the geometry on the other side
String sGeom2=
"POLYGON ((299668.20990794065 5721092.5, 299647.3623194871 5721073.557249224, 299682.8494029705 5721049.148841454, 299668.20990794065 5721092.5))";
Geometry geom2=distanceTest.buildGeometry(sGeom2);
// There is a geometry in the middle, as if it was a wall
String split=
"LINESTRING (299633.6804935104 5721103.780167559, 299668.99872434285 5720999.981241705, 299608.8457218057 5721096.601805294)";
Geometry splitGeom=distanceTest.buildGeometry(split);
// We calculate the distance not taking care of the wall in the middle
double distance = geom1.distance(geom2);
logger.error("Distance : " + distance);
}
public static Geometry buildGeometry(final String areaWKT) {
final WKTReader fromText = new WKTReader();
Geometry area;
try {
area = fromText.read(areaWKT);
}
catch (final ParseException e) {
area = null;
}
return area;
}
}
這太棒了,喬恩。我認爲它適合我的實際要求。使用我使用的Java庫的JTS進行編碼應該很容易。非常感謝你。 – krause
@krause我們非常歡迎您,很高興我能提供幫助。 –