JTS Java空间几何计算、距离、最近点、subLine等计算

文章目录

  • 前言
  • 地理坐标系和投影坐标系
    • 地理坐标系
    • 投影坐标系
    • 地图投影
    • 墨卡托/Web墨卡托
  • 常见坐标系
  • 地理坐标系和投影坐标系互转
    • EPSG:3857和EPSG:4326
    • Java各坐标系之间的转换(高斯、WGS84经纬度、Web墨卡托、瓦片坐标)
  • Geotools
  • JTS
    • vividsolutions和locationtech jts
    • 创建几何对象
      • 点-Point
      • 多点-MultiPoint
      • 线-LineString
      • 多线-MultiLineString
      • 闭合线-LinearRing
      • 多边形-Polygon
      • 多个多边形-MultiPolygon
      • 几何[集合](https://so.csdn.net/so/search?q=集合&spm=1001.2101.3001.7020)列表-GeometryCollection
    • 几何关系判断(返回值 boolean)
    • 几何关系分析(返回值 几何对象)
    • 距离、长度、面积计算
    • 按照代码包把所有功能介绍下
    • 图形可视化化WKT数据(好用的一比)
    • 项目实战
      • 几何到另一个几何最近的点
      • 求几何的交点
      • 利用缓冲画圆
      • 根据起始点求一个线的子线
      • 计算道路与起点之间指定距离之间的交点坐标

前言

项目需求,需要很多的空间几何计算,例如:点、线、面之间的距离、面积、长度、相交、最短距离点等,由于相关文档是真的缺乏,墙内墙外看了大量的博客和文档收集和验证了很久。现将结论和知识点整理发出来。

地理坐标系和投影坐标系

地理坐标系

地理坐标系(Geographic coordinate system),是以经纬度为地图的存储单位。很明显地理坐标系是球面坐标系统。我们要将地球上的数字化信息存放到球面坐标系统上,如何进行操作呢?地球是一个不规则的椭球,如何将数据信息以科学的方法存放到椭球上?这必然要求
我们找到这样的一个椭球体。这样的椭球体具有特点:可以量化计算的。具有长半轴,短
半轴,偏心率。以下几行便是Krasovsky_1940椭球及其相应参数。
Spheroid: Krasovsky_1940
Semimajor Axis: 6378245.000000000000000000
Semiminor Axis: 6356863.018773047300000000
Inverse Flattening(扁率): 298.300000000000010000
然而有了这个椭球体以后还不够,还需要一个大地基准面将这个椭球定位。在坐标系统描
述中,可以看到有这么一行:
Datum: D_Beijing_1954
表示,大地基准面是D_Beijing_1954。

投影坐标系

投影坐标系统,实质上便是平面坐标系统,其地图单位通常为米。

投影的意义:将球面坐标转化为平面坐标的过程便称为投影。

地理坐标系右下角显示Degrees(度)表示经纬度;投影显示的是Meters(米)

imgimg

平常看到的WGS84、高德、百度坐标系都是地理坐标系,当我们需要计算距离、面积、长度时需要用投影坐标系

地图投影

利用一定数学法则把地球表面转换到平面上的理论和方法称为地图投影。由于地球表面是一个不可展平的曲面,所以运用任何数学方法进行投影转换都会产生误差和变形,为按照不同的需求缩小误差,就产生了各种投影方式,如圆柱投影、圆锥投影、等角投影、等面积投影、切投影、割投影等。

img

墨卡托/Web墨卡托

一种正轴等角切圆柱投影。

  • 等角:保证对象形状不变以及方向位置正确。
  • 圆柱:保证纬线经线平行相互垂直且经线间隔相同。
  • 缺点:纬线间隔从赤道向两级逐渐增大,面积变形大。
  • Web墨卡托:Google首创,把地球模拟为球体而非椭球体,近似等角。

img

常见坐标系

WGS84坐标系
地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系。

GCJ02坐标系
火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。

BD09坐标系
百度地图使用坐标系,GCJ02坐标系经加密后的坐标系。

转换方法

国际通用的转换做法:
img
百度的做法:
img

地理坐标系和投影坐标系互转

需要2个依赖库,这里要注意org.geotool库的下载源。

<dependency><groupId>org.locationtech.jts</groupId><artifactId>jts-core</artifactId><version>1.18.1</version>
</dependency>
<dependency><groupId>org.geotools</groupId><artifactId>gt-epsg-hsql</artifactId><version>22-RC</version>
</dependency>
<dependency><groupId>org.geotools</groupId><artifactId>gt-main</artifactId><version>22-RC</version>
</dependency>
<repositories><repository><id>geotools</id><name>geotools</name><url>http://maven.icm.edu.pl/artifactory/repo/</url><releases><enabled>true</enabled></releases></repository>
</repositories>

转换代码示例

    // WGS84(一般项目中常用的是CSR:84和EPSG:4326)CoordinateReferenceSystem sourceCRS = CRS.decode("CRS:84");// Pseudo-Mercator(墨卡托投影)CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:3857");MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, false);Geometry geometryMercator = JTS.transform(geometry, transform);// 面积、周长System.out.println(geometryMercator.getArea());System.out.println(geometryMercator.getLength());

JTS包下的Geometry等类其实是代表的空间几何,它所提供的几何计算只是单纯的值计算,而我们提到的根据GIS经纬度等获取面积周长等其实是需要放到对应坐标系中才有意义。

EPSG:3857和EPSG:4326

墨卡托坐标 EPSG:3857 坐标系。投影坐标系,EPSG:3857 的数据一般是这种的。[12914838.35,4814529.9],看上去相对数值较大。不利于存储,比较占内存。

WGS-84:是国际标准,GPS坐标(Google Earth使用、或者GPS模块)
EPSG:4326 的数据一般是这种的。[22.37,114.05]。利于存储,可读性高

// 2437 GCJ-02:中国坐标偏移标准,Google Map、高德、腾讯使用

Java各坐标系之间的转换(高斯、WGS84经纬度、Web墨卡托、瓦片坐标)

另一种方式,之后研究

https://blog.csdn.net/u010410697/article/details/110003422

Geotools

Geotools是一个java类库,它提供了很多的标准类和方法来处理空间数据,同时这个类库是构建在OGC标准之上的,是OGC思想的一种实现。而OGC是国际标准,所以geotools将来必定会成为开源空间数据处理的主要工具,目前的大部分开源软件,如udig,geoserver等,对空间数据的处理都是由geotools来做支撑。而其他很多的web服务,命令行工具和桌面程序都可以由geotools来实现。

JTS

中文文档:https://max.book118.com/html/2019/0624/6154225215002041.shtm
工具包+相关文档下载:https://download.csdn.net/download/abu935009066/16208250

JTS(Java Topology Suite) Java拓扑套件,是Java的处理地理数据的API,它提供以下功能:

  1. 实现了OGC关于简单要素SQL查询规范定义的空间数据模型
  2. 一个完整的、一致的、基本的二维空间算法的实现,包括二元运算(例如touch和overlap)和空间分析方法(例如intersection和buffer)
  3. 一个显示的精确模型,用算法优雅的解决导致dimensional collapse(尺度坍塌–专业名词不知道对不对,暂时这样译)的情况。
  4. 健壮的实现了关键计算几何操作
  5. 提供著名文本格式的I/O接口
  6. JTS是完全100%由Java写的

JTS支持一套完整的二元谓词操作。二元谓词方法将两个几何图形作为参数,返回一个布尔值来表示几何图形是否有指定的空间关系。它支持的空间关系有:相等(equals)、分离(disjoint)、相交(intersect)、相接(touches)、交叉(crosses)、包含于(within)、包含(contains)、覆盖/覆盖于(overlaps)。同时,也支持一般的关系(relate)操作符。relate可以被用来确定维度扩展的九交模型(DE-9IM),它可以完全的描述两个几何图形的关系。

https://locationtech.github.io/jts/

https://github.com/locationtech/jts

vividsolutions和locationtech jts

maven仓库
img

看了下vividsolutions于2015年就停在更新了,好像在哪儿看过,jts由vividsolutions变为的locationtech,一个爹 应该是。选locationtech这个就完事了

创建几何对象

JTS提供了以下空间数据类型:

多数的空间数据模型都是遵从这个的。

img

private GeometryFactory geometryFactory = new GeometryFactory();

点-Point

ByCoordinate坐标

Coordinate coord = new Coordinate(109.013388, 32.715519);
Point point = geometryFactory.createPoint( coord );

ByWKT

WKTReader reader = new WKTReader( geometryFactory );
Point point = (Point) reader.read("POINT (109.013388 32.715519)");

多点-MultiPoint

WKTReader reader = new WKTReader( geometryFactory );
MultiPoint mpoint = (MultiPoint) reader.read("MULTIPOINT(109.013388 32.715519,119.32488 31.435678)");

线-LineString

Coordinate[] coords  = new Coordinate[] {new Coordinate(2, 2), new Coordinate(2, 2)};
LineString line = geometryFactory.createLineString(coords);
// wkt
WKTReader reader = new WKTReader( geometryFactory );
LineString line = (LineString) reader.read("LINESTRING(0 0, 2 0)");

多线-MultiLineString

Coordinate[] coords1  = new Coordinate[] {new Coordinate(2, 2), new Coordinate(2, 2)};
LineString line1 = geometryFactory.createLineString(coords1);
Coordinate[] coords2  = new Coordinate[] {new Coordinate(2, 2), new Coordinate(2, 2)};
LineString line2 = geometryFactory.createLineString(coords2);
LineString[] lineStrings = new LineString[2];
lineStrings[0]= line1;
lineStrings[1] = line2;
MultiLineString ms = geometryFactory.createMultiLineString(lineStrings);
// wkt
WKTReader reader = new WKTReader( geometryFactory );
MultiLineString line = (MultiLineString) reader.read("MULTILINESTRING((0 0, 2 0),(1 1,2 2))");

闭合线-LinearRing

LinearRing lr = new GeometryFactory().createLinearRing(new Coordinate[]{new Coordinate(0, 0), new Coordinate(0, 10), new Coordinate(10, 10), new Coordinate(10, 0), new Coordinate(0, 0)});

多边形-Polygon

WKTReader reader = new WKTReader( geometryFactory );
Polygon polygon = (Polygon) reader.read("POLYGON((20 10, 30 0, 40 10, 30 20, 20 10))");

多个多边形-MultiPolygon

WKTReader reader = new WKTReader( geometryFactory );
MultiPolygon mpolygon = (MultiPolygon) reader.read("MULTIPOLYGON(((40 10, 30 0, 40 10, 30 20, 40 10),(30 10, 30 0, 40 10, 30 20, 30 10)))");

几何集合列表-GeometryCollection

LineString line = createLine();
Polygon poly =  createPolygonByWKT();
Geometry g1 = geometryFactory.createGeometry(line);
Geometry g2 = geometryFactory.createGeometry(poly);
Geometry[] garray = new Geometry[]{g1,g2};
GeometryCollection gc = geometryFactory.createGeometryCollection(garray);

几何关系判断(返回值 boolean)

关系解释
相等(Equals):几何形状拓扑上相等。
不相交(Disjoint):几何形状没有共有的点。
相交(Intersects):几何形状至少有一个共有点(区别于脱节)
接触(Touches):几何形状有至少一个公共的边界点,但是没有内部点。
交叉(Crosses):几何形状共享一些但不是所有的内部点。
内含(Within):几何形状A的线都在几何形状B内部。
包含(Contains):几何形状B的线都在几何形状A内部(区别于内含)
重叠(Overlaps):几何形状共享一部分但不是所有的公共点,而且相交处有他们自己相同的区域。

举例相交,其他类似

  /*** 至少一个公共点(相交)* @return* @throws ParseException*/public boolean intersectsGeo() throws ParseException{WKTReader reader = new WKTReader( geometryFactory );LineString geometry1 = (LineString) reader.read("LINESTRING(0 0, 2 0, 5 0)");LineString geometry2 = (LineString) reader.read("LINESTRING(0 0, 0 2)");Geometry interPoint = geometry1.intersection(geometry2);//相交点System.out.println(interPoint.toText());//输出 POINT (0 0)return geometry1.intersects(geometry2);}

几何关系分析(返回值 几何对象)

JTS支持基本的空间分析方法。空间分析方法使用一个或两个几何图形作为参数,返回一个新构造的几何图形。

分析解释
缓冲区分析(Buffer)包含所有的点在一个指定距离内的多边形和多多边形
凸壳分析(ConvexHull)包含几何形体的所有点的最小凸壳多边形(外包多边形)
交叉分析(Intersection)A∩B 交叉操作就是多边形AB中所有共同点的集合
联合分析(Union)AUB AB的联合操作就是AB所有点的集合
差异分析(Difference)(A-A∩B) AB形状的差异分析就是A里有B里没有的所有点的集合
对称差异分析(SymDifference)(AUB-A∩B) AB形状的对称差异分析就是位于A中或者B中但不同时在AB中的所有点的集合

img

img

距离、长度、面积计算

  • 1.先把坐标系都转成墨卡托
  • 2.用jts计算距离
  • 3.由于转成墨卡托坐标系,结果比实际偏大,要乘以系数
  		// WGS84(一般项目中常用的是CRS:84和EPSG:4326)CoordinateReferenceSystem sourceCRS = CRS.decode("CRS:84");// Pseudo-Mercator(墨卡托投影)CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:3857");MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, false);GeometryFactory GeometryFactory = new GeometryFactory();Coordinate k96 = new Coordinate(117.41722, 31.975379);Coordinate k97 = new Coordinate(117.426387, 31.970712);Geometry line = JTS.transform(GeometryFactory.createLineString(new Coordinate[]{k96, k97}), transform);//double rate1 = Math.cos(Math.toRadians(k96.y)); 距离短的话乘以这个就行, 大概为: 0.8482973000510488double rate = Math.cos((Math.toRadians(k96.y) + Math.toRadians(k97.y)) / 2.000000);//距离长的话用这个System.out.println("rate: " + rate);// 面积、周长System.out.println(line.getArea());// 面积未验证是乘以 rate 还是其平方System.out.println(line.getLength() * rate);Coordinate tmp = new Coordinate(117.417145, 31.975465);Geometry point = JTS.transform(GeometryFactory.createPoint(tmp), transform);System.out.println(point.distance(line) * rate);

按照代码包把所有功能介绍下

img

图形可视化化WKT数据(好用的一比)

工具包+相关文档下载:https://download.csdn.net/download/abu935009066/16208250
偶然间发现可以使用jts中的工具可视化我们的WKT数据。
img

需要java环境

img

项目实战

几何到另一个几何最近的点

GeometryFactory gf = JTSFactoryFinder.getGeometryFactory(null);
WKTReader reader = new WKTReader(gf);
Geometry line2 = reader.read("LINESTRING(0 0, 10 0, 10 10, 20 10)");
Coordinate c = new Coordinate(5, 5);
PointPairDistance ppd = new PointPairDistance();
DistanceToPoint.computeDistance(line2, c, ppd);
System.out.println(ppd.getDistance());
for (Coordinate cc : ppd.getCoordinates()) {System.out.println(cc);
}

求几何的交点

// create ring: P1(0,0) - P2(0,10) - P3(10,10) - P4(0,10)
LinearRing lr = new GeometryFactory().createLinearRing(new Coordinate[]{new Coordinate(0,0), new Coordinate(0,10), new Coordinate(10,10), new Coordinate(10,0), new Coordinate(0,0)});
// create line: P5(5, -1) - P6(5, 11) -> crossing the ring vertically in the middle
LineString ls = new GeometryFactory().createLineString(new Coordinate[]{new Coordinate(5,-1), new Coordinate(5,11)});
// calculate intersection points
Geometry intersectionPoints = lr.intersection(ls);
// simple output of points
for(Coordinate c : intersectionPoints.getCoordinates()){System.out.println(c.toString());
}

利用缓冲画圆

创建一个包含在设定距离内的所有点的面或多面(想要圆,但是没有。。。):

geometry = point
Geometry buffer = geometry.buffer( 2.0 ); // note distance is in same units as geometry

img

根据起始点求一个线的子线

已知:起点、终点、道路
求解:其在道路上的子轨迹
img

        GeometryFactory GeometryFactory = new GeometryFactory();WKTReader reader = new WKTReader(GeometryFactory);Geometry geom = reader.read("LINESTRING(0 0, 10 0, 10 10, 20 10)");LocationIndexedLine lil = new LocationIndexedLine(geom);LinearLocation start = lil.indexOf(new Coordinate(8, 5));LinearLocation end = lil.indexOf(new Coordinate(17, 10));Geometry result = lil.extractLine(start, end);System.out.println(result.toText());
// 结果        
LINESTRING (10 5, 10 10, 17 10)

img

计算道路与起点之间指定距离之间的交点坐标

已知:道路、在道路的距离
求解:到起点坐标距离的点

    public static Coordinate lengthOnLineString2(Geometry roadLine, double length) {LocationIndexedLine locationIndexedLine = new LocationIndexedLine(roadLine);LinearLocation linearLocation = LengthLocationMap.getLocation(roadLine, length);Coordinate result = locationIndexedLine.extractPoint(linearLocation);return result;}

参考:

  • https://blog.csdn.net/yatsov/article/details/80215278
  • https://geotools.org/
  • http://locationtech.github.io/jts/javadoc/overview-summary.html
  • https://www.giserdqy.com/geoanalysis/29813/
  • http://docs.geotools.org/latest/userguide/welcome/architecture.html
  • https://docs.geotools.org/latest/userguide/library/jts/geometry.html
  • https://docs.geotools.org/latest/userguide/library/jts/snap.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JTS学习笔记

简介 JTS由加拿大的VividSolutions公司开发&#xff0c;是一个用Java语言描述的几何拓扑套件&#xff0c;遵循OpenGIS的Simple Feature Specification&#xff0c;封装了2D几何类型和非常多的空间分析操作&#xff0c;而且包含了不少常见的计算几何算法实现。 JTS被广泛地应用…

填坑:Maven工程引用GeoTools依赖

这两天在做一个系统的后台&#xff0c;需要用到GeoTools做后端空间分析&#xff0c;记录一下自己遇到的问题。 项目通过Maven进行构建&#xff0c;参照文档Maven Quickstart添加GeoTools依赖和远程仓库地址。 <dependencies><dependency><groupId>org.geotoo…

墨卡托投影介绍

一、墨卡托投影 墨卡托投影&#xff0c;又称正轴等角圆柱投影&#xff0c;由荷兰地图学家墨卡托(G.Mercator)于1569年创拟。假设地球被套在一个圆柱中&#xff0c;赤道与圆柱相切&#xff0c;然后在地球中心放一盏灯&#xff0c;把球面上的图形投影到圆柱体上&#xff0c;再把…

GIS算法:可视化工具JTS TestBuilder

java、python、js都有可以引用的第三方包&#xff0c;实现GIS的空间算法。 java是jts&#xff0c;python是shapely&#xff0c;js是turf。 其中jts值得首先拥有&#xff0c;因为jts提供了一个界面工具JTS TestBuilder&#xff0c;可以在上面绘制图形&#xff0c;验证各种算法…

wkt区域围栏

API文档 http://shengshifeiyang.gitee.io/geotools-learning/ /** * 判断以x,y为坐标的点point(x,y)是否在geometry表示的Polygon中 * param x * param y * param geometry wkt格式 POLYGON((0 0, 10 0, 10 10, 0 10,0 0)) * return */ public static boolean withinGeo(doub…

oracle关联字段和序列,oracle(9) 序列和约束

序列 SEQUENCE也是数据库对象之一&#xff0c;作用&#xff1a;根据指定的规则生成一些列数字。序列通常是为某张表的主键提供值使用。主键&#xff1a;通常每张表都会有主键字段&#xff0c;该字段的值要求非空且唯一&#xff0c;使用该字段来确定表中的每一条记录。CREATE SE…

lambda表达式处理异常_lambda表达式内出现异常无法throw抛出

lambda体中有受检异常,为什么不能在lambda表达式外层try catch,只能在lambda里面try catch xxx.getUpdateList().forEach((map) ->{xxxVO vo new xxxVO();BeanUtils.populate(vo,map); // populate方法往外抛了异常list.add(vo);});因为lambda表达式本身没有处理异常的机制…

lambda处理异常四种方式

最近对接第三方呼叫系统&#xff0c;第三方SDK的所有方法里都有异常抛出&#xff0c;因为用到了lambda&#xff0c;所以异常处理还是很必要的。 本文主要用到了四种解决方案&#xff1a; 直接代码块处理自定义函数式接口&#xff0c;warp静态方法通过Either 类型包装通过Pair…

linux 历史命令快捷键,Linux历史命令及bash快捷键

本文环境 Centos71.历史命令1.1 在使用linux中熟练的使用历史命令&#xff0c;能给我很多便捷&#xff0c;下面我来总结一些常用的一些历史命令。a) 执行上一条命令,这个很重要 &#xff0c;执行上一条命令有四种方法&#xff0c;如下:[rootCentOS-7-64data]#[rootCentOS-7-64 …

linux的shell命令 a,linux shell命令大全(都是随堂笔记)

1. Tftp服务器(上传下载文件)注意&#xff1a;上传和下载文件时不能用目录表示 。因此&#xff0c;需要先cd到当前目录。注意目录权限&#xff1a;chmod 0777目录文件 8进制表示&#xff1a;Chmod的文件、目录的权限U自己 g 所属组 o其它 可加减步骤&#xff1a;安装服务器&…

异常 —— throws

1.1 异常概念 1.2 异常体系 java.lang.Throwable:类是 Java 语言中所有错误或异常的超类。 Exception:编译期异常,进行编译(写代码)java程序出现的问题 RuntimeException:运行期异常,java程序运行过程中出现的问题 异常就相当于程序得了一个小毛病(感冒,发烧),把异常处理掉,程序…

制作 小 linux 教程,【NanoPi NEO Plus2开发板试用体验】编译uboot和linux制作最小根文件系统制作刷机包---详细教程...

二、Linux命令基础1、查找文件查找a.c的文件 find -name "a.c"在当前目录搜索a字样的文件 grep "a" *-nR2、解压解压tar.gz文件 tar zxvf xxxxx.tar.gz解压tar.xz文件 先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后&#xff0c;再用 tar xvf xx…

执行throw后 后面代码还会执行吗?

1.当我们对throw的对象进行try catch之后 public void re(int i) {if (i > 5){this.i i;}else {try {throw new Exception("数据非法&#xff01;");} catch (Exception e) {e.printStackTrace();}System.out.println("123");}结果显示&#xff1a;12…

linux怎么查看sklearn版本,Sklearn——Sklearn的介绍与安装

文章目录1.Sklearn简介2.Sklean安装2.1.pip安装2.2.conda安装1.Sklearn简介Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模块之一.Sklearn 包含了很多种机器学习的方式:Classification 分类Regression 回归Clustering 非监督分类Dimensionality reduction…

一些防止 Java 代码被反编译的方法

由于Java字节码的抽象级别较高&#xff0c;因此它们较容易被反编译。本节介绍了几种常用的方法&#xff0c;用于保护Java字节码不被反编译。通常&#xff0c;这些方法不能够绝对防止程序被反编译&#xff0c;而是加大反编译的难度而已&#xff0c;因为这些方法都有自己的使用环…

linux 离线安装中文,linux离线安装及配置redis-Go语言中文社区

本文以centos7系统为例&#xff0c;介绍离线安装redis步骤一、环境准备检查服务器上是否存在gcc-c的环境&#xff0c;使用命令&#xff1a;rpm -qa | grep gcc-c如果没有该环境&#xff0c;则需要安装该环境&#xff0c;离线安装步骤为&#xff1a;1、获取相关rpm包&#xff0c…

Java学习记录 AWT绘图篇

绘制图形 Canvas画布类 Class Canvas java.lang.Object java.awt.Component java.awt.Canvas 用来 绘制图形 或 捕获用户输入的事件。绘制图形需要绘图方法实现绘制图形 方法说明paint(Graphics g)绘图repaint(Graphics g)重新绘图&#xff08;刷新 Graphics绘图类 Class Gra…

linux pmap 内存泄露,一个驱动导致的内存泄漏问题的分析过程(meminfo-pmap-slabtop-alloc_calls)...

关键词&#xff1a;sqllite、meminfo、slabinfo、alloc_calls、nand、SUnreclaim等等。下面记录一个由于驱动导致的内存泄漏问题分析过程。首先介绍问题背景&#xff0c;在一款嵌入式设备上&#xff0c;新使用sqllite库进行数据库操作&#xff0c;在操作数据(大量读写操作)一段…

Java基础--awt详解以及简单应用

GUI 图形用户界面 CLI 命令行用户接口 Java为GUI提供的对象存在java.Awt和Javax.Swing两个包中. Java当中如何完成图形化界面的制作呢? AWT:abstract Window ToolKit.需要调用本地系统实现功能.属于重量级控件.依赖于平台.跨平台性不是特别好. Javax.Swing:在AWT基础上.建立一…

Java图形化界面设计之容器(JFrame)详解

Java图形化界面设计之容器&#xff08;JFrame&#xff09;详解 Java图形化界面设计——容器&#xff08;JFrame&#xff09; 程序是为了方便用户使用的&#xff0c;因此实现图形化界面的程序编写是所有编程语言发展的必然趋势&#xff0c;在命令提示符下运行的程序可以让我们…