cuốn sách gpt4 ai đã làm

Thực hành sử dụng JTS

In lại Tác giả: Người biết Thời gian cập nhật: 2024-03-13 14:16:03 45 4
mua khóa gpt4 Nike

Thực hành sử dụng JTS

1. Lời nói đầu

Giới thiệu

JTS Topology Suite (Java Topology Suite) là một thư viện phần mềm Java mã nguồn mở cung cấp mô hình đối tượng và một tập hợp các hàm hình học cơ bản cho hình học tuyến tính phẳng Euclide.

môi trường

Các tính năng của JTS:https://locationtech.github.io/jts/jts-features.html

GitHub (JTS):https://github.com/locationtech/jts

Tài liệu java của JTS:http://locationtech.github.io/jts/javadoc/overview-summary.html

Công cụ địa lý (JTS):https://docs.geotools.org/latest/userguide/library/jts/index.html

wikipedia (JTS):https://en.wikipedia.org/wiki/JTS_Topology_Suite

wikipedia (WKT):https://en.wikipedia.org/wiki/Well-known_text_repositionation_of_geometry

Mối quan hệ tôpô PostGIS: https://postgis.net/docs/reference.html#idm15481

Sự khác biệt giữa đa giác và đa giác:https://gis.stackexchange.com/questions/225368/under Hiểu-difference-between-polygon-and-multipolygon-for-shapefiles-in-qgis/225373

2. Văn bản

Hướng dẫn cơ bản

  • Định dạng đầu vào/đầu ra: WKT, WKB, GML, Java Swing/AWT Shape
  • định dạng WKT
Kiểu hình học WKT
Điểm ĐIỂM (30 10)
DòngChuỗi LINESTRING (30 10, 10 30, 40 40)
Đa giác ĐA GIÁC ((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))
Đa giác có lỗ ĐA GIÁC ((35 10, 45 45, 15 40, 10 20, 35 10), (20 30, 35 35, 30 20, 20 30))
đa điểm ĐA ĐIỂM ((10 40), (40 30), (20 20), (30 10))
đa điểm ĐA ĐIỂM (10 40, 40 30, 20 20, 30 10)
MultiLineString ĐA DẠNG ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))
Đa giác ĐA NĂNG (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))
Đa giác có lỗ ĐA NĂNG (((40 40, 20 45, 45 30, 40 40)), ((20 35, 10 30, 10 10, 30 5, 45 20, 20 35), (30 20, 20 15, 20 25, 30 20)))
Bộ sưu tập hình học BỘ SƯU TẬP HÌNH HỌC (ĐIỂM (40 10), LINESTRING (10 10, 20 20, 10 40), ĐA GIÁC ((40 40, 20 45, 45 30, 40 40)))
  • mối quan hệ tôpô
Từ khóa minh họa tham khảo
bằng (bằng) Trả về true nếu cả hai hình học đều chứa cùng một tập hợp điểm trong không gian ST_Bằng
rời rạc (rời rạc) Trả về true nếu hai hình học không khớp nhau về mặt không gian (chúng không có điểm chung) ST_Rời rạc
giao nhau Trả về true nếu hai hình học/địa lý giao nhau trong không gian 2D (có ít nhất một điểm chung) ST_Giao nhau
chạm vào Trả về true nếu hai hình học có ít nhất một điểm chung nhưng phần bên trong của chúng không giao nhau ST_Chạm
thánh giá Trả về true nếu hai hình học có một số (nhưng không phải tất cả) điểm bên trong chung ST_Thập tự giá
ở trong Trả về true nếu hình A hoàn toàn nằm trong hình B ST_Trong vòng
chứa Trả về true khi và chỉ khi không có điểm nào của B nằm ngoài A và ít nhất một điểm bên trong B nằm trong A ST_Chứa
chồng chéo Trả về true nếu hai hình học giao nhau và có cùng kích thước nhưng không hoàn toàn chứa nhau ST_Chồng chéo
  • Phân tích lớp phủ
Từ khóa minh họa tham khảo
đệm Trả về một hình học bao gồm tất cả các điểm trong một khoảng cách nhất định tính từ hình học đó ST_Bộ đệm
convexHull (thân lồi) Vỏ lồi của hình học tính toán ST_Thân lồi
ngã tư Trả về một hình học đại diện cho phần được chia sẻ bởi hình học A và B ST_Giao lộ
sự đoàn kết Trả về một hình học biểu thị sự kết hợp các tập hợp điểm của hình học đầu vào ST_Liên minh
sự khác biệt Trả về một hình học đại diện cho phần hình học A không giao nhau với hình học B ST_Khác biệt
symDifference (sự khác biệt đối xứng) Trả về một hình học đại diện cho phần rời rạc của hình học A và B ST_SymSự khác biệt

Hồ sơ sử dụng

  • Thêm phần phụ thuộc
  org.locationtech.jts jts-core 1.18.2 

Tạo các đặc điểm hình học

gói com.example; nhập org.locationtech.jts.geom.*; nhập org.locationtech.jts.io.ParseException; nhập org.locationtech.jts.io.WKTReader; Bản đồ; /** * Mô hình hình học JTS * Kiểu hình học: điểm ( POINT ), đa điểm ( MULTIPOINT ) * đường thẳng ( LINESTRING ), đa dòng (MULTILINESTRING) * bề mặt (POLYGON), đa bề mặt (MULTIPOLYGON) * vòng tròn * phương thức tạo: nhà máy hình học và WKT * */ lớp công khai JTSGeometryUtil { // Đối tượng nhà máy hình học riêng GeometryFactory hình họcFactory = new GeometryFactory() ; /* * * Nhận điểm* @param lng kinh độ* @param lat vĩ độ* */ Điểm công khai getPoint(Double lng, Double lat){ Tọa độ tọa độ = new Tọa độ(lng, lat); trả về hình họcFactory.createPoint(tọa độ); } /** * Lấy điểm, được tạo thông qua WKT* @param lng kinh độ* @param lat vĩ độ * */ public Point getPointByWKT(Double lng, Double lat) ném ParseException { StringBuilder wktSB = new StringBuilder(); // POINT(111 22) wktSB.append("POINT").append("(").append( lng ).append(" ").append( lat ).append(")"); return (Point) createGeometry(wktSB.toString()); } /** * Nhận đa điểm* @param tọa độ bộ sưu tập tọa độ* */ public MultiPoint getMultiPoint(Co Tọa độ [] tọa độ){ trả về hình họcFactory.createMultiPointFromCoords(tọa độ); } /** * Nhận nhiều điểm, được tạo thông qua WKT * @param tọa độ bộ sưu tập tọa độ* */ public MultiPoint getMultiPointByWKT(Coordine [] tọa độ) ném ParseException { / /MULTIPOINT(111 22,111 22) Chuỗi wktStr = createWktString("MULTIPOINT", tọa độ); return (MultiPoint) createGeometry(wktStr); } /** * Lấy dòng* @param tọa độ bộ sưu tập tọa độ* */ public LineString getLineString(Co Tọa độ [] tọa độ){ return hình họcFactory.createLineString (tọa độ); } /** * Lấy dòng, được tạo thông qua WKT * @param tọa độ bộ sưu tập tọa độ* */ public LineString getLineStringByWKT(Co Tọa độ [] tọa độ) ném ParseException { Chuỗi wktStr = createWktString("LINESTRING", tọa độ); return (LineString) createGeometry(wktStr); } /** * Nhận nhiều dòng* @ param coordList Nhiều bộ sưu tập tọa độ* */ public MultiLineString getMultiLineString(List coordList){ LineString [] lineStrings = new LineString[coordList.size()]; for(int m=0; m coordList) ném ParseException { String wktStr = createMultiWktString("MULTILINESTRING", coordList); trả về(MultiLineString) createGeometry(wktStr); } /** * Lấy bề mặt* @param tọa độ bộ sưu tập tọa độ* */ Đa giác công khai getPolygon( Tọa độ [] tọa độ){ return hình họcFactory.createPolygon(tọa độ); param shellCoordines Bộ tọa độ ranh giới bề mặt* @param HoleCoordList Bộ tọa độ nhiều lỗ* */ Đa giác công khai getPolygon(CoordList [] shellCoordList, List coordList){ Đa giác [] đa giác = Đa giác mới[ coordList.size() ]; for(int i=0; i> phối hợpMap){ Polygon [] Polygons = new Polygon[ coordenMap.size() ]; for(Map.Entry> item : tọa độMap.entrySet()){ LinearRing shell = hình họcFactory.createLinearRing(item.getKey()); // Ranh giới bề mặt LinearRing[] Holes = new LinearRing[item.getValue().size()] // Lỗ cho(int m=0; m coordList) ném ParseException { StringBuilder wktSB = new StringBuilder(); { wktSB.append(","); } // 1. Xử lý ranh giới bề mặt wktSB.append("("); wktSB.append("("); // Bắt đầu ranh giới bề mặt wktSB.append(coordinesToWktStr(coordines)); wktSB.append(")"); // Ranh giới bề mặt kết thúc wktSB.append(")"); chỉ mục++; } wktSB.append(")"); createGeometry(wktSB.toString()); } /** * Nhận nhiều mặt* @param phối hợp Bản đồ ranh giới mặt và tập tọa độ lỗ* */ public MultiPolygon getMultiPolygonByWKT(Map> coorMap) ném ParseException { StringBuilder wktSB = new StringBuilder(); wktSB.append("MULTIPOLYGON") shellCoordine = mục.getKey(); Danh sách HoleCoordList = item.getValue(); if(index > 0) { wktSB.append(","); } wktSB.append("("); wktSB.append(coordinesToWktStr( shellCoordList)); wktSB.append(")"); wktSB.append(")"); return (MultiPolygon) createGeometry(wktSB.toString()); } /** * Lấy hình tròn (không có lỗ) * @param lng kinh độ * @param lat vĩ độ * @param bán kính bán kính * * / Đa giác công khai getCircle(lng kép, vĩ độ kép, bán kính kép cuối cùng) { cung int cuối cùng = 32; Số điểm cung Tọa độ coords[] = new Tọa độ[ arcs + 1 ]; for (int i = 0; i < arcs; i++) { // Chuyển đổi góc sang phép tính radian góc kép = ((double) i / (double) cung ) * Math.PI * 2.0; double dx = Math.cos(góc) * bán kính double dy = Math.sin(góc) * bán kính coords[i] = mới; Tọa độ((double) lng + dx, (double) lat + dy); } coords[arcs] = coords[0]; // Đặt dữ liệu đầu tiên vào cuối để tạo thành một vòng lặp khép kín LinearRing ring = hình họcFactory.createLinearRing(coords ) ; // Đa giác vòng = hình họcFactory.createPolygon(vòng, null); /** * Tạo một đối tượng hình học từ chuỗi WKT * @param wktStr wkt string * */ public Geometry createGeometry(String wktStr) ném ParseException { WKTReader wktReader = new WKTReader(geometryFactory); ** * Tạo chuỗi WKT dựa trên loại hình học và tập tọa độ* @param geomType Kiểu hình học* @param tọa độ bộ sưu tập tọa độ* */ public String createWktString(String geomType, Tọa độ [] tọa độ){ StringBuilder wktSB = new StringBuilder(); tọa độToWktStr(tọa độ)); wktSB.append(")"); wktSB.toString(); } /** * Chuyển đổi bộ sưu tập tọa độ thành chuỗi theo yêu cầu của wkt * @param tọa độ bộ sưu tập tọa độ * */ riêng Chuỗi tọa độToWktStr( Tọa độ [] tọa độ){ StringBuilder wktSB = new StringBuilder(); int i=0; i HoleCoordList){ StringBuilder wktSB = new StringBuilder(); // 1. Xử lý ranh giới bề mặt wktSB.append("("); // Bắt đầu ranh giới bề mặt wktSB.append(coordinesToWktStr(shellCoordines)); wktSB.append(")" ) ; // Điểm cuối ranh giới bề mặt // 2. Xử lý nhiều lỗ if(holeCoordList != null && HoleCoordList.size() > 0){ for(int n=0; n HoleCoordList){ StringBuilder wktSB = new StringBuilder(); wktSB.append(geomType).append("("); wktSB.append(coordinesToWktStr(shellCoordList)); wktSB.append(")"); trả về wktSB.toString(); }

Ví dụ hoạt động

package com.example; import org.locationtech.jts.geom.*; public class App { public static void main( String[] args ) { App app = new App(); // Mối quan hệ cấu trúc liên kết chứa app.doContains(); // Giao lộ phân tích lớp phủ app.doIntersection(); } JTSGeometryUtil riêng jtsGeometryUtil = new JTSGeometryUtil(); Chứa* */ public void doContains(){ // Điểm điểm = jtsGeometryUtil.getPoint(116.403406,39.93397); // Tọa độ bề mặt[] tọa độ = tọa độ mới[4] = Tọa độ mới(116.361725,39.95676 ) ; // Tọa độ đầu tiên và cuối cùng giống nhau[1] = new Tọa độ(116.364887,39.908515); tọa độ mới[2] = tọa độ mới(116.442501,39.909622); tọa độ[2] = tọa độ mới(116.440488,39.955654); Tọa độ (116.361725,39.95676); // Tọa độ đầu tiên và cuối cùng giống nhau Đa giác đa giác = jtsGeometryUtil.getPolygon(tọa độ); // Hoạt động kết quả boolean = đa giác.contains(điểm); /** * Phân tích giao lộ* */ public void doIntersection(){ // Tọa độ dòng 1 [] tọa độ1 = Tọa độ mới[2]; tọa độ mới1[0] = Tọa độ mới(116.361725,39.95676); tọa độ1[1] = Tọa độ mới(116.442501,39.909622); LineString lineString1 = jtsGeometryUtil.getLineString(coordens1); tọa độ2 = mới Tọa độ[2]; tọa độ2[0] = Tọa độ mới(116.364887,39.908515); tọa độ2[1] = Tọa độ mới(116.440488,39.955654); LineString lineString2 = jtsGeometryUtil.getLineString(cointereds2); lineString1.intersection(lineString2); System.out.println(hình học);
45 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress