【Java万花筒】Java航海图:畅游地理信息处理的无尽可能

地理智能化:Java GIS库的全面解析与实战

前言

在当今数字化时代,地理信息系统(GIS)的应用越来越广泛,为解决空间数据处理和分析的需求提供了强大的工具。本文将深入探讨几个在Java环境中备受欢迎的GIS库,它们为开发者提供了丰富的功能和灵活性,从而构建出更智能、更高效的地理信息应用。

欢迎订阅专栏:Java万花筒

文章目录

  • 地理智能化:Java GIS库的全面解析与实战
    • 前言
      • 1. GeoTools
        • 1.1 概述
        • 1.2 特性
        • 1.3 与现有系统集成
        • 1.4 地图样式化与渲染
        • 1.5 地理坐标转换
        • 1.6 地图交互性与用户反馈
      • 2. JTS Topology Suite
        • 2.1 简介
        • 2.2 几何操作
        • 2.3 应用场景与应用
        • 2.4 几何缓冲区分析的高级用法
        • 2.5 空间分析中的高级用法
        • 2.6 与其他GIS库整合实践
      • 3. LocationTech Spatial4j
        • 3.1 空间索引
        • 3.2 与GeoTools和JTS的兼容性
        • 3.3 高级空间分析
        • 3.4 空间索引的优化与性能调整
        • 3.5 地理编码与反向地理编码
      • 4. PostGIS
        • 4.1 空间数据库扩展
        • 4.2 地理空间数据操作
        • 4.3 与GIS库整合实践
        • 4.4 空间索引的创建与优化
        • 4.5 地理空间数据分析与可视化
      • 5. Leaflet
        • 5.1 Web地图显示
        • 5.2 互动地图功能
        • 5.3 与Java后端集成
        • 5.4 地图事件处理与用户反馈
    • 总结

1. GeoTools

1.1 概述

GeoTools是一个用于处理地理空间数据的开源Java库。它提供了一套工具和API,用于读取、写入、处理和分析地理信息。GeoTools支持各种地理数据格式,并具有丰富的功能,包括地图投影转换、空间分析、数据过滤等。

1.2 特性

GeoTools具有强大的特性,例如:

  • 空间数据读写:支持常见的地理数据格式,如Shapefile、GeoJSON、KML等。
  • 地图投影:提供多种地图投影转换工具,满足不同坐标系需求。
  • 空间分析:包括缓冲区分析、空间关系判断等功能。
  • 数据过滤:允许按空间和属性条件过滤地理数据。
1.3 与现有系统集成
// 示例代码:读取Shapefile文件
import org.geotools.data.DataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.data.simple.SimpleFeatureCollection;import java.io.File;
import java.io.IOException;public class GeoToolsExample {public static void main(String[] args) {File file = new File("path/to/shapefile.shp");try {DataStore dataStore = FileDataStoreFinder.getDataStore(file);String[] typeNames = dataStore.getTypeNames();String typeName = typeNames[0];SimpleFeatureSource featureSource = dataStore.getFeatureSource(typeName);SimpleFeatureCollection collection = featureSource.getFeatures();} catch (IOException e) {e.printStackTrace();}}
}
1.4 地图样式化与渲染

GeoTools不仅可以处理地理数据的读写和分析,还支持地图样式化和渲染,使开发者能够以更直观的方式呈现地理信息。以下是一个简单的地图渲染示例:

// 示例代码:使用GeoTools进行地图样式化与渲染
import org.geotools.data.simple.SimpleFeatureIterator;
import org.opengis.feature.simple.SimpleFeature;
import org.geotools.styling.SLD;
import org.geotools.styling.Style;
import org.geotools.styling.StyleBuilder;public class GeoToolsRenderingExample {public static void main(String[] args) {// 假设有一个SimpleFeatureCollection对象名为 features,表示地理要素集合// 创建StyleBuilderStyleBuilder styleBuilder = new StyleBuilder();// 创建样式Style style = SLD.createSimpleStyle(features.getSchema());// 渲染地图GeoToolsMapRenderer.renderMap(features, style);}
}
1.5 地理坐标转换

GeoTools提供了丰富的地理坐标转换工具,使得在不同坐标系之间进行转换变得轻而易举。以下是一个简单的坐标转换示例:

// 示例代码:使用GeoTools进行地理坐标转换
import org.geotools.geometry.jts.JTS;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.Point;public class GeoToolsCoordinateTransformation {public static void main(String[] args) {// 假设有一个Geometry对象名为 geometry,表示地理几何对象Geometry geometry = ...; // 初始化地理几何对象// 定义源坐标系和目标坐标系CoordinateReferenceSystem sourceCRS = ...; // 源坐标系CoordinateReferenceSystem targetCRS = ...; // 目标坐标系// 进行坐标转换Geometry transformedGeometry = JTS.transform(geometry, sourceCRS, targetCRS);}
}
1.6 地图交互性与用户反馈

GeoTools支持在地图上实现交互性操作,如地图缩放、平移、标记添加等。同时,通过用户反馈可以获取与地图交互相关的信息。以下是一个简单的地图交互性与用户反馈示例:

// 示例代码:使用GeoTools实现地图交互性与用户反馈
import org.geotools.swing.JMapFrame;
import org.geotools.swing.MapLayerTable;
import org.geotools.swing.action.InfoAction;
import org.geotools.swing.tool.CursorTool;public class GeoToolsMapInteraction {public static void main(String[] args) {// 假设有一个MapLayerTable对象名为 mapLayerTable,表示地图图层表// 创建JMapFrameJMapFrame mapFrame = new JMapFrame(mapLayerTable);// 添加交互工具mapFrame.enableToolBar(true);mapFrame.enableStatusBar(true);mapFrame.enableLayerTable(true);// 添加信息工具mapFrame.getMapPane().setCursorTool(new CursorTool() {@Overridepublic void onMouseClicked(MapMouseEvent ev) {// 处理鼠标点击事件,获取地图上的信息InfoAction infoAction = new InfoAction(mapFrame.getMapPane());infoAction.actionPerformed(null);}});// 显示地图框架mapFrame.setSize(800, 600);mapFrame.setVisible(true);}
}

通过以上拓展,我们更深入地了解了GeoTools库的功能,包括地图样式化与渲染、地理坐标转换、地图交互性与用户反馈等。这些功能使GeoTools成为构建更加强大和交互性地理信息应用的理想选择。

2. JTS Topology Suite

2.1 简介

JTS Topology Suite是一个用于处理几何数据的Java库。它提供了强大的几何操作和算法,包括点、线、面的拓扑关系判断、空间分析等功能。

2.2 几何操作

JTS支持多种几何操作,如:

  • 缓冲区分析
  • 几何关系判断(相交、包含等)
  • 几何合并和分割
2.3 应用场景与应用
// 示例代码:计算两个几何对象的交集
import com.vividsolutions.jts.geom.Geometry;public class JTSExample {public static void main(String[] args) {Geometry geom1 = ...; // 第一个几何对象Geometry geom2 = ...; // 第二个几何对象Geometry result = geom1.intersection(geom2);}
}
2.4 几何缓冲区分析的高级用法

JTS Topology Suite的缓冲区分析功能不仅限于简单的缓冲区生成,还提供了一些高级用法,例如设置缓冲区的端类型和精确度。以下是一个展示高级缓冲区分析的示例代码:

// 示例代码:使用JTS进行几何缓冲区分析的高级用法
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.operation.buffer.BufferOp;
import com.vividsolutions.jts.operation.buffer.BufferParameters;public class JTSAdvancedBufferExample {public static void main(String[] args) {GeometryFactory geometryFactory = new GeometryFactory();Geometry inputGeometry = ...; // 输入几何对象// 设置缓冲区参数,指定端类型和缓冲区精确度BufferParameters bufferParameters = new BufferParameters();bufferParameters.setEndCapStyle(BufferParameters.CAP_ROUND);bufferParameters.setJoinStyle(BufferParameters.JOIN_BEVEL);bufferParameters.setQuadrantSegments(8);// 执行高级缓冲区分析Geometry result = BufferOp.bufferOp(inputGeometry, 10, bufferParameters, BufferOp.CAP_FLAT);}
}
2.5 空间分析中的高级用法

JTS Topology Suite提供了丰富的空间分析功能,包括距离计算、面积计算等。以下是一个展示空间分析中高级用法的示例代码:

// 示例代码:使用JTS进行空间分析的高级用法
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.algorithm.distance.DistanceOp;public class JTSSpatialAnalysisExample {public static void main(String[] args) {Geometry geom1 = ...; // 第一个几何对象Geometry geom2 = ...; // 第二个几何对象// 计算两个几何对象之间的最短距离DistanceOp distanceOp = new DistanceOp(geom1, geom2);double distance = distanceOp.distance();}
}

通过这些高级用法,开发者可以更灵活地利用JTS Topology Suite处理几何数据,满足复杂场景下的空间分析需求。

2.6 与其他GIS库整合实践

JTS Topology Suite与其他GIS库的整合能力强大,例如与GeoTools和Spatial4j的兼容性。以下是一个展示JTS与GeoTools整合实践的示例代码:

// 示例代码:JTS与GeoTools整合实践
import com.vividsolutions.jts.geom.Geometry;
import org.geotools.geometry.jts.JTS;
import org.geotools.referencing.CRS;public class JTSAndGeoToolsIntegrationExample {public static void main(String[] args) {Geometry jtsGeometry = ...; // JTS几何对象// 将JTS几何对象转换为GeoTools几何对象org.opengis.geometry.Geometry geoToolsGeometry = JTS.to(geoToolsCRS, jtsGeometry);}
}

通过以上拓展,我们更深入地了解了JTS Topology Suite的几何缓冲区分析和空间分析的高级用法,以及它与其他GIS库的整合实践。这使得JTS成为处理复杂几何数据和空间分析的重要工具。

3. LocationTech Spatial4j

3.1 空间索引

LocationTech Spatial4j是一个用于构建和查询空间索引的库。它提供了多种索引算法,支持快速的空间数据检索。

3.2 与GeoTools和JTS的兼容性

Spatial4j与GeoTools和JTS集成紧密,可以无缝地与这两个库配合使用,实现更复杂的地理信息处理。

3.3 高级空间分析
// 示例代码:创建一个Spatial4j的空间索引
import org.locationtech.spatial4j.context.SpatialContext;
import org.locationtech.spatial4j.io.*;
import org.locationtech.spatial4j.shape.Shape;
import org.apache.lucene.store.RAMDirectory;public class Spatial4jExample {public static void main(String[] args) {SpatialContext spatialContext = SpatialContext.GEO;SpatialIndexWriter writer = new SpatialIndexWriter(spatialContext, new RAMDirectory());SpatialIndexReader reader = new SpatialIndexReader(spatialContext, new RAMDirectory());}
}
3.4 空间索引的优化与性能调整

Spatial4j提供了多种空间索引算法,但在实际应用中,选择适合场景的索引算法对性能至关重要。以下是一个展示优化空间索引和性能调整的示例代码:

// 示例代码:优化Spatial4j空间索引和性能调整
import org.locationtech.spatial4j.context.SpatialContext;
import org.locationtech.spatial4j.context.SpatialContextFactory;
import org.locationtech.spatial4j.shape.Point;
import org.locationtech.spatial4j.shape.Shape;
import org.locationtech.spatial4j.shape.SpatialRelation;
import org.locationtech.spatial4j.shape.impl.PointImpl;public class Spatial4jOptimizationExample {public static void main(String[] args) {SpatialContext spatialContext = SpatialContextFactory.makeSpatialContext();// 创建一个Spatial4j的空间索引,选择合适的算法和调整性能参数SpatialIndex spatialIndex = new SpatialIndex(spatialContext, "quadtree");spatialIndex.setCapacity(1000); // 设置索引容量// 在空间索引中添加点Point point = new PointImpl(10.0, 20.0, spatialContext);spatialIndex.add(point);// 在空间索引中查询与给定形状相交的点Shape queryShape = ...; // 给定查询形状SpatialRelation spatialRelation = SpatialRelation.INTERSECTS;SearchResults searchResults = spatialIndex.search(queryShape, spatialRelation);}
}
3.5 地理编码与反向地理编码

Spatial4j支持地理编码(将地理位置转换为地址)和反向地理编码(将地址转换为地理位置)。以下是一个展示地理编码和反向地理编码的示例代码:

// 示例代码:Spatial4j地理编码与反向地理编码
import org.locationtech.spatial4j.context.SpatialContext;
import org.locationtech.spatial4j.context.SpatialContextFactory;
import org.locationtech.spatial4j.io.GeocodingResult;
import org.locationtech.spatial4j.io.Geocoder;public class Spatial4jGeocodingExample {public static void main(String[] args) {SpatialContext spatialContext = SpatialContextFactory.makeSpatialContext();// 创建地理编码器Geocoder geocoder = new Geocoder(spatialContext);// 地理编码:将地理位置转换为地址double latitude = 40.7128; // 纬度double longitude = -74.0060; // 经度GeocodingResult geocodingResult = geocoder.geocode(latitude, longitude);String address = geocodingResult.getFormattedAddress();// 反向地理编码:将地址转换为地理位置String locationName = "New York, NY";GeocodingResult reverseGeocodingResult = geocoder.reverseGeocode(locationName);double reverseLatitude = reverseGeocodingResult.getLatitude();double reverseLongitude = reverseGeocodingResult.getLongitude();}
}

通过这些示例,我们深入了解了Spatial4j的空间索引的优化与性能调整、地理编码与反向地理编码的高级用法。Spatial4j不仅提供基础的空间索引功能,还支持用户根据实际需求进行性能优化和地理位置信息的转换。

4. PostGIS

4.1 空间数据库扩展

PostGIS是一个用于PostgreSQL数据库的空间数据库扩展,提供了地理空间对象的存储和查询功能。

4.2 地理空间数据操作

PostGIS支持丰富的地理空间数据操作,包括空间查询、几何计算等。

4.3 与GIS库整合实践
// 示例代码:在PostGIS中查询距离某点最近的地理对象
import org.postgis.Geometry;
import org.postgis.PGgeometry;public class PostGISExample {public static void main(String[] args) {String query = "SELECT * FROM spatial_table " +"ORDER BY geom_column <-> ST_SetSRID(ST_MakePoint(lon, lat), 4326) " +"LIMIT 1;";PGgeometry result = ...; // Execute query and get the result}
}
4.4 空间索引的创建与优化

在PostGIS中,为了提高地理空间数据的检索速度,可以使用空间索引。以下是一个展示如何在PostGIS中创建和优化空间索引的示例代码:

// 示例代码:在PostGIS中创建和优化空间索引
import org.postgis.PGgeometry;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class PostGISSpatialIndexExample {public static void main(String[] args) {try {// 假设已经建立数据库连接Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/mydatabase", "user", "password");Statement statement = connection.createStatement();// 在表的几何列上创建空间索引String createIndexQuery = "CREATE INDEX spatial_index ON spatial_table USING GIST(geom_column);";statement.execute(createIndexQuery);// 优化空间索引String optimizeIndexQuery = "VACUUM ANALYZE spatial_table;";statement.execute(optimizeIndexQuery);// 关闭数据库连接statement.close();connection.close();} catch (Exception e) {e.printStackTrace();}}
}
4.5 地理空间数据分析与可视化

PostGIS不仅用于存储和查询地理空间数据,还支持地理空间数据的分析和可视化。以下是一个展示在PostGIS中进行地理空间数据分析与可视化的示例代码:

// 示例代码:在PostGIS中进行地理空间数据分析与可视化
import org.postgis.PGgeometry;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class PostGISSpatialAnalysisExample {public static void main(String[] args) {try {// 假设已经建立数据库连接Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/mydatabase", "user", "password");Statement statement = connection.createStatement();// 查询并获取地理空间数据String query = "SELECT * FROM spatial_table;";ResultSet resultSet = statement.executeQuery(query);while (resultSet.next()) {PGgeometry geometry = (PGgeometry) resultSet.getObject("geom_column");// 进行地理空间数据分析和可视化操作}// 关闭数据库连接resultSet.close();statement.close();connection.close();} catch (Exception e) {e.printStackTrace();}}
}

通过这些示例,我们深入了解了PostGIS中空间索引的创建与优化、地理空间数据分析与可视化的高级用法。PostGIS不仅是一个用于存储地理空间数据的数据库扩展,还提供了丰富的功能支持用户进行高级的空间分析和可视化操作。

5. Leaflet

5.1 Web地图显示

Leaflet是一个用于创建交互式Web地图的JavaScript库。它轻量且易于使用,支持多种地图图层和标记。

5.2 互动地图功能

Leaflet具有丰富的互动地图功能,如拖拽、缩放、标记添加等。

5.3 与Java后端集成

Leaflet通常与Java后端进行集成,以获取动态生成的地理信息数据或与数据库交互。以下是一个展示Leaflet与Java后端集成的示例代码:

// 示例代码:Leaflet与Java后端集成
import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.router.Route;
import org.leafletjs.LeafletMap;
import org.leafletjs.layer.TileLayer;@Route("map")
public class MapView extends Div {public MapView() {// 创建Leaflet地图对象LeafletMap leafletMap = new LeafletMap();// 添加基础地图图层TileLayer baseLayer = new TileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png");leafletMap.addLayer(baseLayer);// 在地图上添加标记leafletMap.addMarker(51.505, -0.09).setTitle("Marker");// 设置地图视图中心和缩放级别leafletMap.setView(51.505, -0.09, 13);// 将Leaflet地图添加到界面add(leafletMap);}
}
5.4 地图事件处理与用户反馈

Leaflet支持多种地图事件,如点击、拖拽、缩放等,以及用户反馈机制。以下是一个展示地图事件处理与用户反馈的示例代码:

// 示例代码:Leaflet地图事件处理与用户反馈
import org.leafletjs.event.DragEndEvent;
import org.leafletjs.event.DragEndListener;
import org.leafletjs.event.MapClickListener;public class LeafletEventHandlingExample {public static void main(String[] args) {LeafletMap leafletMap = ...; // 假设已经创建Leaflet地图对象// 添加地图点击事件监听器leafletMap.addClickListener(new MapClickListener() {@Overridepublic void onClick(MapClickEvent event) {// 处理地图点击事件,获取点击位置信息double lat = event.getLatLng().getLat();double lng = event.getLatLng().getLng();}});// 添加拖拽结束事件监听器leafletMap.addDragEndListener(new DragEndListener() {@Overridepublic void onDragEnd(DragEndEvent event) {// 处理地图拖拽结束事件}});}
}

通过以上示例,我们深入了解了Leaflet的与Java后端集成、地图事件处理与用户反馈的高级用法。Leaflet作为一款强大的前端地图库,与Java后端的结合能够实现更灵活和动态的地图应用。

总结

本文以层次化的结构介绍了五个主要的Java GIS库,覆盖了空间数据处理、几何分析、空间索引以及数据库扩展等方面。通过详细的示例代码,读者可以轻松了解如何使用这些库构建空间智能的Java应用。不仅如此,我们还探讨了它们之间的整合实践,为读者提供了全面的视角,使其能够在实际项目中灵活应用这些库。

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

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

相关文章

前端踩坑之——antDesignVue的upload组件

本地启动时控制台会报404&#xff0c;放到服务器上控制台会报405(多发一个请求) 原因&#xff1a;upLoad有默认的上传事件 解决&#xff1a;阻止默认事件即可 beforeUpload Hook function which will be executed before uploading. Uploading will be stopped with false or …

系统性学习vue-vuex

系统性学习vue-vuex 理解vuexvuex工作原理搭建vuex环境案例Vuex的开发者工具使用getters配置项mapState与mapGettersmapActions和mapMutationsvuex模块化namespace 理解vuex 概念&#xff1a; 专门在Vue中实现集中式状态&#xff08;数据&#xff09;管理的一个Vue插件&#xf…

性能优化-一文宏观理解OpenCL

本文主要对OpenCL做一个整体的介绍、包括环境搭建、第一个OpenCL程序、架构、优化策略&#xff0c;希望对读者有所收获。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础…

消费增值模式:引领消费者与平台共创双赢的新篇章

在数字化时代&#xff0c;消费模式正在发生深刻变革。消费者不再满足于单纯的购物行为&#xff0c;而是寻求更加个性化和有价值的消费体验。而平台也面临着如何吸引和留住消费者的挑战。消费增值模式作为一种新型的商业模式&#xff0c;正逐渐成为解决这一问题的关键。 消费增…

react、Vue打包直接运行index.html不空白方法

react vue 在根目录下创建 vue.config.js 文件&#xff0c;写入 module.exports {publicPath: ./, }

C++中map按照从大到小的顺序存储元素

map按照从大到小存储元素 引言map的大致介绍概述 场景误区示例示例代码&#xff08;方法一&#xff09;运行结果示例代码二&#xff08;方法二&#xff09;运行结果 引言 在对map的使用中&#xff0c;由于对业务的需要&#xff0c;希望map中存储元素能够按照键的大小从大到小的…

ZooKeeper 应用场景深度解析

目录 引言 1. 分布式配置管理 2. 分布式锁 3. 分布式队列 4. 分布式协调 5. 分布式协同 6、数据发布与订阅 7、命名服务 8、集群管理 结论 引言 ZooKeeper 是一个分布式协调服务&#xff0c;被广泛应用于构建高可用、可靠性强的分布式系统。它提供了一组简单而强大的…

若依修改侧边栏

引用&#xff1a;https://blog.csdn.net/Sabrina_cc/article/details/125871591 子菜单选中后&#xff0c;文字和背景改变&#xff1a; .el-submenu__title i{color: #e8e8e8 !important;} #app .sidebar-container .theme-dark .nest-menu .el-submenu .is-active > .el-su…

C++设计模式(李建忠)笔记1

C设计模式&#xff08;李建忠&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。 参考链接 Youtube: C设计模式 Gtihub源码与PPT&#xff1a;https://github.com/ZachL1/Bilibili-plus 豆瓣: 设计模式–可复用面向对象软件的基础 文章目录 C设计模…

探索单元测试和 E2E 测试:提升软件质量的关键步骤(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

修复系统和修复常见安卓问题的 10 个应用

我们都喜欢我们的 Android 智能手机&#xff0c;对吧&#xff1f;有很多值得喜欢的地方。 Android 手机易于使用且通常无故障&#xff0c;但毕竟它只是一台机器&#xff0c;偶尔也会出现问题。面对现实吧&#xff0c;我们的智能手机并不完美。用户经常遇到的一些常见 Android …

【Kafka每日一问】Kafka消费者故障,出现活锁问题如何解决?

在Kafka中&#xff0c;消费者的“活锁”通常是指消费者实例持续失败并重新加入消费者组&#xff0c;但却始终无法成功处理消息。这种现象可能会导致消费者组不断触发重平衡&#xff08;rebalance&#xff09;&#xff0c;而消息却没有被实际消费。以下是一些解决或缓解活锁问题…

select子句简单查询

Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 目录 数据查询 起别名 连接 ​编辑 去重 ​编辑 另外补充几个不常用的命令 如果要进行查询,那么需要使用数据操纵语言&#xff08;Data Manipulation Language&#xff0c;DML&am…

Golang 如何基于现有的 context 创建新的 context?

目录 基于现有的 context 创建新的 context 现有创建方法的问题 Go 1.21 中的 context.WithoutCancel 函数 Go 版本低于 1.21 该怎么办&#xff1f; 在 Golang 中&#xff0c;context 包提供了创建和管理上下文的功能。当需要基于现有的 context.Context 创建新的 context …

React Store及store持久化的使用

1.安装 npm insatll react-redux npm install reduxjs/toolkit npm install redux-persist2. 使用React Toolkit创建counterStore并配置持久化 store/modules/counterStore.ts&#xff1a; import { createSlice } from reduxjs/toolkit// 定义状态类型 interface Action {…

编程笔记 html5cssjs 042 CSS颜色

编程笔记 html5&css&js 042 CSS颜色 一、CSS 颜色名二、CSS 背景色三、CSS 文本颜色四、CSS 边框颜色五、用颜色值指定颜色六、练习小结 在《编程笔记 html5&css&js 018 HTML颜色》中已经述及颜色。但颜色应当由CSS处理&#xff0c;再次列出。 指定颜色是通过使…

linux-部署Samba文件共享服务

linux-部署Samba文件共享服务 1、使用命令安装samba服务和samba客户端 dnf install samba samba-client # 或者 yum install samba samba-client2、配置文件的设置(可提前备份smb.conf) vim /etc/samba/smb.conf [global]workgroup SAMBAsecurity userpassdb backend tdbsam…

在EasyBoss ERP上查Shopee产品表现,数据更全、处理更高效!

在运营Shopee本土店的过程中&#xff0c;卖家需要及时了解产品数据来进行产品的调整和优化。不过&#xff0c;调整和优化需要基于数据&#xff0c;而非仅凭直觉。 但是&#xff0c;如何全面地查看产品表现数据、快速处理表现不佳的产品&#xff0c;成为诸多卖家头痛的问题&…

python中常见的异常和解决办法

在Python中&#xff0c;常见的异常及其解决办法如下&#xff1a; 语法错误(SyntaxError)&#xff1a;程序在解析阶段发现了语法错误&#xff0c;通常是由于缺少括号、引号或其他语法错误引起的。解决办法是仔细检查代码&#xff0c;确保语法正确。 解析错误(ParseError)&#…

CMake入门教程【高级篇】创建自定义目标add_custom_target

1.概述信息 add_custom_target命令在CMake中用于创建一个不生成任何输出文件的自定义目标。这个命令非常有用,尤其是当你需要执行非构建任务时,比如清理操作、生成文档或运行一些自定义的脚本。 #mermaid-svg-iI1z5xwwKtzTM0ub {font-family:"trebuchet ms",verda…