- Tạo ứng dụng Spring Boot bằng Spring Launchizr
- Cấu hình Cassandra trong Spring Boot
- Định cấu hình nhóm kết nối Tomcat trên Spring Boot
- Định tuyến tin nhắn Camel đến Artemis được nhúng bằng WildFly
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.
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
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))) |
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 |
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 |
org.locationtech.jts jts-core 1.18.2
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(); }
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);
Tôi tìm trên mạng nhưng không tìm thấy bài viết phù hợp giải thích cách sử dụng dịch vụ WCF bằng javascript, đặc biệt là WebScriptEndpoint. Bất cứ ai có thể đưa ra bất kỳ hướng dẫn về điều này? Cảm ơn bạn vì câu trả lời tốt nhất Đây là một bài viết về.
Tôi đang viết một chương trình C sẽ chạy các lệnh Linux, ví dụ: cat /etc/passwd | grep list cut -c 1-5 Tôi không nhận được kết quả nào *ở đây cha mẹ đợi con đầu lòng (chi
Vì vậy, tôi đang cố gắng xử lý việc tải tệp lên và sau đó lưu trữ tệp đó vào cơ sở dữ liệu dưới dạng tệp nhị phân. Sau khi lưu trữ, tôi cố gắng phân phát tệp trên URL đã cho. Tôi dường như không thể tìm thấy một phương pháp hoạt động ở đây. Tôi cần sử dụng cơ sở dữ liệu vì tôi sử dụng Google Apps
Tôi đang cố gắng tạo một macro thêm công thức bên dưới vào một ô rồi kéo nó qua cột và sao chép cùng một công thức trong cột H. Tôi muốn nhập dữ liệu vào cột F và H bằng công thức Range("F1") .công thức = "=IF(ISE
Câu hỏi tương tự như câu hỏi này, nhưng tôi muốn sử dụng OperatorPrecedenceParser để phân tích một biểu thức bằng ứng dụng hàm trong FParsec. Đây là AST của tôi: type Expression =.
Tôi muốn thay đổi truy vấn này thành mã tùy thuộc vào vị trí chọn COUNT(giới tính) làm số lượng giới tính từ khách hàng bằng cách sử dụng phần tiếp theo và node.js
Tôi đang sử dụng GNU bash, phiên bản 5.0.3(1)-distro (x86_64-pc-linux-gnu) và tôi đang tự hỏi tại sao tôi lại gặp lỗi cú pháp với một câu lệnh gán đơn giản: #/bin/bash var1= /tmp
Đây là lý do tại sao mã của tôi không hoạt động trong IE. Mã của tôi hoạt động trong tất cả các trình duyệt. Không có gì. Nhưng khi tôi chạy dự án của mình trên IE thì nó phát hiện lỗi. Và cả lớp jquery của tôi cũng như lớp InsertadjacentHTMl đều không
Tôi đang cố gắng thay đổi HTML bên trong của thẻ. Tôi không có quyền truy cập vào biểu mẫu nên không thể chỉnh sửa HTML. Mã định danh duy nhất mà thẻ có là thuộc tính "for". Đây là cấu trúc của đầu vào và nhãn:
Tôi có một trang nơi tôi trả lại bài đăng của người dùng, tôi có thể đưa ra nhận xét ngay lập tức về những bài đăng này bằng cách sử dụng một số mã jquery, sau khi nhận xét mới được đăng, tôi chèn nhận xét mới bên dưới bài đăng cùng với nút xóa. Vấn đề là nút Xóa không hoạt động trên các phần tử mới được chèn vào,
Tôi có tệp "được phân cách bằng đường ống" với khoảng 20 cột. Tôi chỉ muốn băm cột đầu tiên bằng cách sử dụng sha1sum, một số giống như số tài khoản và trả về phần còn lại của các cột. Cách tốt nhất để làm điều này bằng awk hoặc sed là gì? tài khoản
Tôi cần chèn nội dung sau vào bảng của mình... Bảng người dùng của tôi có năm cột id, tên người dùng, mật khẩu, tên, mục nhập. (Tôi chưa gửi bất cứ thứ gì vào mục này, tôi sẽ làm điều đó sau bằng php) Nhưng vì lý do nào đó tôi vẫn gặp lỗi này: #1054 - U
Vì vậy, tôi đang cố gắng có một trường nhập để tôi có thể nhập bất kỳ ký tự nào, nhưng sau đó viết thường giá trị đã nhập, xóa mọi ký tự không phải chữ và số, để lại "." Ví dụ mình nhập: 70% trái đất là nước, -!*#$^ & 30% đất bị mất
Tôi đang cố gắng làm một việc mà tôi nghĩ là rất đơn giản nhưng vì lý do nào đó tôi lại không đạt được kết quả như mong muốn? Tôi mới làm quen với javascript nhưng có kinh nghiệm với java nên tôi tin rằng mình không sử dụng một số loại quy tắc chính xác. Đây là phương thức lấy giá trị đầu vào, kiểm tra lựa chọn
Tôi muốn tải dữ liệu từ cơ sở dữ liệu mysql bằng Angularjs. Đây là cách ứng dụng hoạt động; người dùng đăng nhập và tên người dùng của họ được lưu trữ trong cookie. Tên người dùng này được hiển thị trên trang chủ. Tôi muốn nhận giá trị này và chuyển nó qua Angularjs
Tôi đang sử dụng autoLayout và tôi muốn đặt nhãn UIlabel trên UITableViewCell, nhãn này phải luôn ở bên phải và chính giữa phía bên phải của ô. Đây là điều tôi đang cố gắng đạt được nên ở đây bạn có thể thấy điều tôi đang nói đến
Tôi cần truy vấn tương đương với elaticsearch với MySql. Truy vấn sql của tôi: CHỌN DISTINCT t.product_id NHƯ id TỪ tbl_sup_price t
Tôi đang triển khai mã để sử dụng JSON. thiết lập func() { if let FlickrURL = NSURL(string: "https://api.flickr.com/
Tôi đã thử khai báo một biến bằng vòng lặp for và sau đó kiểm tra xem cols và rols có giống nhau không. Nếu có, nó sẽ chạy hàm đệ quy. Tuy nhiên, tôi gặp sự cố khi thực hiện thao tác trong javascript. Có ai có thể giúp được không? Bây giờ, khi so sánh col.1 và
Tôi đã đưa ra một ví dụ ngắn gọn về vấn đề tôi đang giải quyết. Mã HTML: 1 2 3 Mã CSS: .BB a:hover{ color: #000 } .BB > li:after {
Tôi là một lập trình viên xuất sắc, rất giỏi!