About PostGIS
PostGIS adds support for geographic objects to the PostgreSQL object-relational database. In effect, PostGIS "spatially enables" the PostgreSQL server, allowing it to be used as a backend spatial database for geographic information systems (GIS), much like ESRI's SDE or Oracle's Spatial extension. PostGIS follows the OpenGIS "Simple Features Specification for SQL" and has been certified as compliant with the "Types and Functions" profile.
PostGIS development was started by Refractions Research as a project in open source spatial database technology. PostGIS is released under the GNU General Public License. PostGIS continues to be developed by a group of contributors led by a Project Steering Committee and new features continue to be added.
译文:
PostGIS 向 PostgreSQL 对象关系数据库添加了对地理对象的支持。 实际上,PostGIS 在空间上启用了 PostgreSQL 服务器,使其可以用作地理信息系统 (GIS) 的后端空间数据库,就像 ESRI 的 SDE 或 Oracle 的 Spatial 扩展一样。 PostGIS 遵循 OpenGIS“SQL 的简单特征规范”,并已被认证为符合“类型和函数”配置文件。
PostGIS 的开发由 Refractions Research 作为开源空间数据库技术中的一个项目启动。 PostGIS 是在 GNU 通用公共许可证下发布的。 PostGIS 继续由项目指导委员会领导的一组贡献者开发,并继续添加新功能。
友情提示:本文篇幅较长,共分为5篇文章,几乎涵盖了PostGIS的所有内容,PostGIS作为PostgreSQL的重要插件,是目前国内外GIS行业的首选数据库的主要推动力。如果你感兴趣的话,可以先收藏,再慢慢学习~
DownLoad
在下面的网址中,你可以选择下载适合你的windows版本,如果你是用于生产环境,建议尽量不要选择最近的release版本。在下载安装PostGIS插件之前,你需要先具有PostgreSQL的运行环境。
在下面的网址中,我们在自己使用的PostGreSQL版本里面,选择PostGIS插件,因为这些是被PostGIS官方团队所验证和支持的。
http://download.osgeo.org/postgis/windows/
在这个网址,你可以选择适合你的其他版本安装包,也包括免安装的压缩包形式文件。
http://postgis.net/install/
安装
下载完成之后,进行安装;
PostGIS
的安装很简单,一路下一步,但是需要注意的是,PostGIS
插件需要和PostgreSQL
安装在同一个目录(也就是PostGIS
需要选择PostGreSQL
的根目录进行安装)。
安装过程当中的空间数据库可以创建也可以不创建,这个根据自己的情况来看,如果你要创建空间数据库的话,就需要连接到当前的PostgreSQL
。
准备PostGIS
在开始菜单栏找到PostGreSQL
,点击里面的pgAdmin4
;
点击左上角的Server,根据提示输入连接信息进行登录;
登录上之后,创建一个数据库实例,并新建数据库;
依次点击:数据库名-Extensions-右击-create-extension,输入:postgis
;
使用PostGIS的前置知识
1. 常见的PostGIS支持的GIS对象
这些创建GIS对象的语法要熟悉,实际工作中很容易忘~
• POINT(0 0) //点 • LINESTRING(0 0,1 1,1 2) //线 • POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)) // 面 • MULTIPOINT((0 0),(1 2)) //多点 • MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4)) // 多线 • MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1))) // 多面 • GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4)) //几何集合
2. SRID——存储空间对象的地理坐标系的编号,其输入输出可通过以下接口进行
bytea WKB = ST_AsBinary(geometry); text WKT = ST_AsText(geometry); geometry = ST_GeomFromWKB(bytea WKB, SRID); geometry = ST_GeometryFromText(text WKT, SRID);
示例
SELECT (ST_GeomFromText('POINT(-126.4 45.32)', 312), 'A Place'); 输出如下: (0101000020380100009A99999999995FC0295C8FC2F5A84640,"A Place")
3. 支持3D GIS对象的语法
PostGIS EWKB/EWKT增加了对3DM、3DZ、4D坐标的支持和嵌入式SRID信息。
• POINT(0 0 0) -- XYZ • SRID=32632;POINT(0 0) -- XY with SRID • POINTM(0 0 0) -- XYM • POINT(0 0 0 0) -- XYZM • SRID=4326;MULTIPOINTM(0 0 0,1 2 1) -- XYM with SRID • MULTILINESTRING((0 0 0,1 1 0,1 2 1),(2 3 1,3 2 1,5 4 1)) • POLYGON((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)) • MULTIPOLYGON(((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),((-1 -1 0,-1 -2 0,-2 -2 0,-2 -1 0,-1 -1 0))) • GEOMETRYCOLLECTIONM( POINTM(2 3 9), LINESTRINGM(2 3 4, 3 4 5) ) • MULTICURVE( (0 0, 5 5), CIRCULARSTRING(4 0, 4 4, 8 4) ) • POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) ) • TRIANGLE ((0 0, 0 9, 9 0, 0 0)) • TIN( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )
3DM、3DZ、4D之间的转换接口:
bytea EWKB = ST_AsEWKB(geometry); text EWKT = ST_AsEWKT(geometry); geometry = ST_GeomFromEWKB(bytea EWKB); geometry = ST_GeomFromEWKT(text EWKT)
示例
SELECT 'SRID=4;POINT(0 0)'::geometry; 输出如下: 01010000200400000000000000000000000000000000000000
4. 弯曲的几何实体
SQL多媒体应用空间规范扩展了SQL规范的简单功能,定义了一些 圆弧插值曲线。 SQL-MM的定义包括3DM、3DZ和4D坐标,但不允许嵌入SRID信息。 Well-Known Text扩展还没有被完全支持。
下面是一些简单的曲线几何图形的例子。
• CIRCULARSTRING(0 0, 1 1, 1 0) • CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0) • COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1)) //类似于LINESTRING • CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1))//复合曲线 • MULTICURVE((0 0, 5 5),CIRCULARSTRING(4 0, 4 4, 8 4)) //复合曲线
5. 创建一张空间表
CREATE TABLE global_points ( id SERIAL PRIMARY KEY, name VARCHAR(64), location GEOGRAPHY(POINT,4326) );
6. 插入数据
INSERT INTO global_points (name, location) VALUES ('Town', 'SRID=4326;POINT(-110 30)'); INSERT INTO global_points (name, location) VALUES ('Forest', 'SRID=4326;POINT(-109 29)'); INSERT INTO global_points (name, location) VALUES ('London', 'SRID=4326;POINT(0 49)');
7. 建立索引
Creating an index works the same as GEOMETRY. PostGIS will note that the column type is GEOGRAPHY and create an
appropriate sphere-based index instead of the usual planar index used for GEOMETRY.
CREATE INDEX global_points_gix ON global_points USING GIST ( location );
8. 查询与计算
//查询给位置1000公里之内的城镇 SELECT name FROM global_points WHERE ST_DWithin(location, 'SRID=4326;POINT(-110 29)':: geography, 1000000);
// 计算从西雅图飞往伦敦的距离 SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geography, 'POINT(-21.96 64.15)'::geography); //计算点线之间的距离 SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geometry, 'POINT(-21.96 64.15) '::geometry);
9. spatial_ref_sys表
spatial_ref_sys表是一个包含PostGIS和OGC兼容的数据库表,它列出了3000多个已知的空间参考系 系统以及在它们之间进行转换/投影所需的细节。 虽然PostGIS的spatial_ref_sys表包含了3000多个比较常用的空间参考系统定义 的定义,但它并不包含所有已知的定义,如果你熟悉proj4的结构,你可以定义你自己的投影。
10. SRID
一个整数值,用于唯一识别数据库中的空间参考系统(SRS)。
11. 创建一个空间数据表
//建表 CREATE TABLE ROADS (ID serial, ROAD_NAME text, geom geometry(LINESTRING,4326) ); //添加字段 ALTER TABLE roads ADD COLUMN geom2 geometry(LINESTRINGZ,4326);
12. 创建视图,目的是简化SQL语句
//创建视图 CREATE VIEW public.vwmytablemercator AS SELECT gid, ST_Transform(geom, 3395) As geom, f_name FROM public.mytable; //删除视图 DROP VIEW public.vwmytablemercator;
13. 加载 GIS (Vector) 数据
INSERT INTO roads (id, geom, road_name) VALUES (1,'SRID=4326;LINESTRING(191232 243118,191108 243242)'::geometry,'Jeff Rd'); INSERT INTO roads (id, geom, road_name) VALUES (2,'SRID=4326;LINESTRING(189141 244158,189265 244817)','Geordie Rd'); INSERT INTO roads (id, geom, road_name) VALUES (3,'SRID=4326;LINESTRING(192783 228138,192612 229814)','Paul St'); INSERT INTO roads (id, geom, road_name) VALUES (4,'SRID=4326;LINESTRING(189412 252431,189631 259122)','Graeme Ave'); INSERT INTO roads (id, geom, road_name) VALUES (5,'SRID=4326;LINESTRING(190131 224148,190871 228134)','Phil Tce'); INSERT INTO roads (id, geom, road_name) VALUES (6,'SRID=4326;LINESTRING(198231 263418,198213 268322)','Dave Cres'); COMMIT;
14. 导入数据
14.1 使用psql
psql -d [database] -f roads.sql
14.2 使用shp2pgsql
`# shp2pgsql -c -D -s 4269 -i -I shaperoads.shp myschema.roadstable > roads.sql
psql -d roadsdb -f roads.sql`
14.3 Unix 命令
# shp2pgsql shaperoads.shp myschema.roadstable | psql -d roadsdb
15. 检索数据
//全查 SELECT id, ST_AsText(geom) AS geom, road_name FROM roads; //条件查询 SELECT id, road_name FROM roads WHERE geom='SRID=312;LINESTRING(191232 243118,191108 243242)'::geometry; //相交查询 SELECT id, road_name FROM roads WHERE ST_Intersects(geom, 'SRID=312;POLYGON((...))'); //使用矩形框来查询框内是否含有目标实体 SELECT ST_AsText(geom) AS geom FROM roads WHERE geom && ST_MakeEnvelope(191232, 243117,191232, 243119,312,4326);
16. pgsql2shp
//语法模板 pgsql2shp [] [.] pgsql2shp []
17. 建立索引
索引使得处理空间数据库大型数据集成为可能。
GiST Indexes
GiST是 "通用搜索树 "的缩写,是一种通用的索引形式。除了GIS索引之外,GiST还被用来加速 加快对各种不规则数据结构(整数阵列、光谱数据等)的搜索,这些结构不适合使用普通的B-Tree 索引。
//2D索引 CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] ); //n维索引 CREATE INDEX [indexname] ON [tablename] USING GIST ([geometryfield] gist_geometry_ops_nd); //确保索引在更新或者建立时,依然可以对表进行写操作; CREATE INDEX CONCURRENTLY [indexname] ON [tablename] USING GIST ( [geometryfield] ); //收集表的统计数据报告,以便优化查询SQL VACUUM ANALYZE [table_name] [(column_name)];
BRIN Indexes
BRIN是 "块范围索引 "的意思,是PostgreSQL 9.5中引入的一种通用的索引形式。BRIN是 是一种有损失的索引,它的主要用途是为读和写的性能提供一个折中。它的主要目标是 处理非常大的表,其中一些列与它们在表中的物理位置有一些自然的关联。 表内的物理位置有一些自然的关联。除了GIS索引之外,BRIN还被用来加快对各种规则或不规则数据结构的搜索速度 (整数、数组等)
//普通2D索引 CREATE INDEX [indexname] ON [tablename] USING BRIN ( [geometryfield] ); //3D索引 CREATE INDEX [indexname] ON [tablename] USING BRIN ([geometryfield] brin_geometry_inclusion_ops_3d); //4D索引 CREATE INDEX [indexname] ON [tablename] USING BRIN ([geometryfield] brin_geometry_inclusion_ops_4d); //修改默认的块大小 CREATE INDEX [indexname] ON [tablename] USING BRIN ( [geometryfield] ) WITH ( pages_per_range = [number]);
SP-GiST Indexes
SP-GiST是 "空间分割的通用搜索树 "的缩写,是一种通用的索引形式,支持分割的 搜索树,如四叉树、K-D树和弧度树(tries)。这些数据结构的共同特点是,它们 重复地将搜索空间划分为不需要同等大小的分区。除了GIS索引之外,SP-GiST还被用来 加快对许多种数据的搜索,如电话路由、IP路由、子串搜索等。 与GiST索引一样,SP-GiST索引也是有损失的,因为它们存储的是包含空间对象的边界盒。 对象。SP-GiST索引可以被看作是GiST索引的替代品。性能测试表明,SP-GiST 索引在有许多重叠对象的情况下特别有用,也就是所谓的 "面条数据"。 一旦GIS数据表超过几千行,就可以使用SP-GiST索引来加快数据的空间搜索速度。
//2D索引 CREATE INDEX [indexname] ON [tablename] USING SPGIST ( [geometryfield] ); //3D索引 CREATE INDEX [indexname] ON [tablename] USING SPGIST ([geometryfield] spgist_geometry_ops_3d); //确保索引在更新或者建立时,依然可以对表进行写操作; CREATE INDEX CONCURRENTLY [indexname] ON [tablename] USING SPGIST ( [geometryfield] ); //收集表的统计数据,以便优化查询SQL VACUUM ANALYZE [table_name] [(column_name)];
关于空间索引的具体使用和操作符介绍,请大家参考这篇文章,这里就不具体一一展开了。
学以致用 | PostgreSQL之空间索引
那其实准确的来讲空间索引不是PostGreSQL
提供的,而是由PostGIS
提供的功能,这也正体现插件扩展的的意义就是存在于无形,却作用无处不在!
18. 复杂查询示例
//距离匹配查询 SELECT the_geom FROM geom_table WHERE ST_Distance(the_geom, 'SRID=312;POINT(100000 200000)') //指定100的缓冲区的范围内查询 SELECT the_geom FROM geom_table WHERE ST_DWithin(the_geom, 'SRID=312;POINT(100000 200000)', 100)
19. raster2pgsql
//栅格数据转为sql文件 raster2pgsql raster_options_go_here raster_file someschema.sometable > out.sql //实操示例,栅格数据入库 raster2pgsql -s 4326 -I -C -M *.tif -F -t 100x100 public.demelevation > elev.sql psql -d gisdb -f elev.sql //Unix下栅格数据入库的操作命令 raster2pgsql -s 4326 -I -C -M *.tif -F -t 100x100 public.demelevation | psql -d gisdb //创建一个全视图、2和4级的概述表,使用复制模式插入 raster2pgsql -I -C -e -Y -F -s 26986 -t 128x128 -l 2,4 bostonaerials2008/*.jpg aerials. boston | psql -U postgres -d gisdb -h localhost -p 5432 // get a list of raster types supported: raster2pgsql -G //创建一张存储栅格数据的表 CREATE TABLE myrasters(rid serial primary key, rast raster); //建立索引 CREATE INDEX myrasters_rast_st_convexhull_idx ON myrasters USING gist( ST_ConvexHull( rast) );
20. PostGIS Geometry/Geography/Box Data Types
box2d
box2d是一种空间数据类型,用于表示一个几何体或几何体集合的二维围合盒。例如 例如,ST_Extent聚合函数返回一个box2d对象。 该表示法包含xmin、ymin、xmax、ymax的值。这些是X和Y轴的最小值和最大值。 和Y扩展的最小值和最大值。
box3d
box3d是一个postgis空间数据类型,用于表示一个几何体或几何体集合的三维包围盒。 几何体的三维包围盒。例如,ST_3DExtent聚合函数返回一个box3d对象。 该表示法包含xmin, ymin, zmin, xmax, ymax, zmax的值。这些是X、Y和Z的最小和最大 X、Y和Z轴的极限值。
geometry
geometry是PostGIS的一个基本空间数据类型,用于表示平面(欧几里得)坐标系中的一个特征。 对几何体的所有空间操作都使用几何体所在的空间参考系统的单位。
geometry_dump
geometry_dump是一个包含字段的复合数据类型。
geom - 对一个几何体组件的引用
path[] - 一个一维的整数数组,定义了倾倒的几何体到geom组件的导航路径。 路径数组从1开始(例如,path[1]是第一个元素。) 它被ST_Dump*系列函数用作输出类型,将一个复杂的几何体分解成其组成部分。
geography
geography是一种空间数据类型,用于在大地坐标系中表示一个特征。大地坐标系的模型 使用一个椭圆体对地球进行建模。 通过考虑到椭圆体模型,对地理学类型的空间操作可以提供更准确的结果。
总结
这篇文章,我们主要对PostGIS 的背景、下载、安装,以及一些常用的前置知识进行了较为系统的介绍。
如果你对PostGIS有兴趣,希望可以帮助到你~
你可能感兴趣的:([第一篇] PostGIS:“我让PG更完美”)
2025年,越是本地商家,越要做好推广
刀客Doc
网络
去年8月份在无锡的时候,我受邀参加一个餐饮行业的营销沙龙,大概有70多人的样子。沙龙上,我观察到一个很有意思的现象,越是成功的商家,投广意识越强。而经营遭困境的商家,营销方式越保守,投广意识越弱。从表面看,这是一个认知问题:一些商家偏于保守,认识不到广告对商业、对生意的正向作用。更深一层看,这还是一个实践问题:因为我发现,也有不少商家认识到了投广很重要,只是不知道怎么做。有个江阴做刀鱼面的老板说了
[C#]C#连接MySql数据库
赵闪闪168.
C# 数据库 c# mysql
1、要连接MySql数据库必须首先下载MySql官方的连接.net的文件,文件下载地址为http://dev.mysql.com/downloads/connector/net/6.6.html#downloads,下载平台选择.Net&Mono,下载ZIP免安装版。2、解压缩刚才下载的mysql-connector-net-6.6.6-noinstall.zip文件,里面有几个版本选择,在这里我
Qt 进阶之路_qt进阶
2401_87556590
qt 开发语言
作者:billy版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处前言古语有云:“工欲善其事,必先利其器”。一件好的开发工具可以帮助开发者快速、准确的完成任务。博主主要从事于客户端、嵌入式、移动端的开发工作,而我的主要开发工具就是Qt。第一次接触Qt博主就被Qt的各种功能模块深深吸引,而且十分容易上手,现在一用就好几年了。为了让更多朋友了解Qt,学习Qt,博主在这里分享一
【分布式日志篇】从工具选型到实战部署:全面解析日志采集与管理路径
网罗开发
人工智能 实战 java集 spring boot 人工智能 分布式
网罗开发(小红书、快手、视频号同名) 大家好,我是展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、HarmonyOS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。图书作者:《ESP32-C3物联网工程开发实战》图书作者:《SwiftUI入门,进阶与实战》超级个体:CO
从音频到 PDF:AI 全流程打造完美英文绘本教案
伟贤AI之路
自动化 AI编程 人工智能
今天把英文绘本的自学教案自动生成流程完成了,我分享一下整个实现思路,让你也轻松搞定英文绘本教案的产出,让孩子的学习之路更加顺畅。从音频到PDF:AI全流程打造完美英文绘本教案一、音频转文本:AI助力第一步借助AI的强大能力,将绘本的音频MP3转化为清晰的文本。这一过程不仅节省时间,还能确保文本的准确性。你可以参考这篇教程:家长必看!1小时搞定RAZ英文绘本英文提取!二、文本自动整理:高效又便捷接下
FACEBOOK改名META,元宇宙救不了FACEBOOK
公众号:肉眼品世界
大数据 微软 编程语言 区块链 python
肉眼品世界导读:没错,看标题你就会发现这里又是不同的观点,正如此,我相信即便是这个公众号,以及由此而散开的花是值得期待的;这不仅打开一扇技术的窗,更打开一扇人生的窗口读懂中国互联网,读懂商业模式请关注微信公众号“肉眼品世界”(ID:find_world_fine),深度价值体系传递FACEBOOK的更名与愿景今天facebook在Connect2021的开幕会上,宣布公司更名为meta,正式进入M
深入解析 GZIP 压缩传输:优化网络性能的利器
码农阿豪@新空间代码工作室
好“物”分享 网络
个人名片作者简介:java领域优质创作者个人主页:码农阿豪工作室:新空间代码工作室(提供各种软件服务)个人邮箱:[
[email protected] ]个人微信:15279484656个人导航网站:www.forff.top座右铭:总有人要赢。为什么不能是我呢?专栏导航:码农阿豪系列专栏导航面试专栏:收集了java相关高频面试题,面试实战总结️Spring5系列专栏:整理了Spring5重要知识点与
swiper移入暂停_用Swiper插件实现无缝轮播的品牌展示,鼠标移动停止,鼠标移出无缝移动视觉效果...
weixin_39726971
swiper移入暂停
正常操作,正常分析,大家好,我是D1n910。文章关键词:技术前端JQuery入门滚动文章前言:公司要求做官网呀呀呀,其中有一部分设计是要求我们最亲爱的品牌商的LOGO能够在底部无缝轮播,鼠标移上去就停下来。效果如下:一、使用插件介绍1、使用的框架是JQuery,因为讲究快速、兼容、展示,所以没有用vue、react之类的看起来高大上的框架。2、使用的是优秀的轮播插件Swiper3.0版(实际上S
Google广告数据分析与优化总结
奔跑的栀子
计算广告 广告 计算广告 数据分析 数据可视化 google
一、概述广告优化师虽属于广告行业,但在实际的优化过程中无不考验着优化师的数据分析能力。不同的计划在不同时期情况不一样,具体的优化应当以当时的状态跟所处情形来进行,因此对于这个行业来讲没有百分之百奏效的优化方式,广告优化师能做的就是根据自己的经验分析和判断可能是什么原因导致了计划出现问题,以及通过尝试去改变效果不好的现状。以下是我曾经优化比较成功的案例之一,下面将分日期对计划所处的状态、猜测结果出现
Web3D技术应用的场景有哪些?有何优势?
mirrornan
3D行业资讯 web3 3D模型 三维扫描 3D建模 3d
Web3D技术,即将三维图形技术与Web技术结合,使用户无需额外软件即可通过浏览器体验三维场景。其应用场景广泛,且具备诸多优势,以下是对Web3D技术应用场景及其优势的详细阐述:一、应用场景电商领域:Web3D技术可以提供3D商品展示,让消费者能够全面了解商品的每一个细节,并且进行定制等交互操作,提升购物体验。51建模网的Web3D展示引擎,让3D交互展示制作更简单,轻松赋予用户制作Web3D的能
Web和H5网页中的3D模型交互展示,是如何制作的?
mirrornan
3D行业资讯 3d webgl 科技
在网页中交互展示3D产品模型,已成为现代营销和销售不可或缺的一环,不仅极大地提升了用户体验和参与度,更成为吸引潜在客户、促进销售转化的不可或缺的一环。那么,网页中如何实现3D交互展示?按照制作流程可分为以下几个关键步骤:步骤1:3D建模要创建产品的3D模型,首先需要选择一款适合的3D建模软件。市面上有众多选项可供选择,如Blender、Maya、3dsMax、C4D等。也可以通过3D扫描仪进行扫描
跨境电商选品技巧 掌握这几招让店铺更具竞争力
纯干苹果派
跨境电商 大数据
选品是影响店铺成败的关键环节。优质的商品不仅能吸引消费者,还能提升店铺的盈利能力。那么如何科学高效地选择产品呢以下几招将帮助你打造更具竞争力的跨境电商店铺。研究目标市场需求了解目标市场的消费者偏好是选品的第一步。可以通过以下方式进行市场调研分析热门电商平台的畅销榜单,例如亚马逊的BestSellers和eBay的TrendingProducts使用GoogleTrends查看特定产品的搜索热度,了
【成人版python基础入门】第一章 开篇——与 Python 的浪漫相遇
精通代码大仙
python python 开发语言
开篇——与Python的浪漫相遇在这个数字化日益menjadi成主流的时代,掌握一门编程语言似乎已经成为了每个人不可推卸的责任。如果你正在寻找一种既强大又易学的语言,那么Python就是你心中的“白月光”。这不仅仅是因为它简洁明了的语法,良好的社区支持,更因为它那无可比拟的跨平台性——无论你的电脑是Windows、MacOS还是Linux,Python都将无差别地陪伴在你身边。现在,让我们一起进入
【成人版python基础入门】第一章 循环与条件判断——让程序“活”起来
精通代码大仙
python python 服务器
循环与条件判断——让程序“活”起来在与Python的第一次浪漫相遇之后,我们已经学会了如何使用变量、数据类型、输入输出和基本运算符。现在,是时候让我们的程序“活”起来,让它能够像人一样思考和做出决策。这一篇教程将带你深入学习Python的循环和条件判断,这些基本概念是编写复杂程序的基石。通过风趣的例子和实际代码示例,我们将一起探索Python的逻辑世界。条件判断:if、elif、else语句条件判
以企业为中心的隐私保护与数据安全治理(基于GRC)
「已注销」
大数据 审计 数据安全 安全 大数据 产品运营
跳出单独的法律行规的层面,基于GRC、CG的角度简单快速梳理了一下数据安全与隐私保护治理的内容。数据安全治理的需求来自于企业的战略、所面临的法律法规或监管层面的合规要求、业务面临的风险等,目的是让企业在市场中保持竞争优势、法律合规以及数据安全战略securityprojectmanagement过程:项目规划、项目实施、效果检测、覆盖评估内容安全防御基础设施DDoS、HIDS、WAF安全运维基础设
安卓图形化开发!Android插件化主流框架和实现原理,值得收藏!
赵是水瓶座
程序员 Android
前言先介绍一下自己吧,不是什么二本渣校也不是什么非专业。我就是重点大学毕业,大学学的是Java,我个人比较乐于学习于是自学Android一年。趁着这次疫情,大洗牌我凭借天生优势,——聪明的脑袋以及自己不断地刻苦的学习,在一众高手之中成功脱颖而出。现在网上都喜欢这么搞,哪有这么多二本渣校逆袭。年薪50w+都是吹出来的,只有你正真拿到年薪50w+你才知道,你要做多少事,付出多少。目录:1.网络2.Ja
快速入门Volc Engine的MaaS LLM模型
azzxcvhj
python
在这篇文章中,我将为你详细介绍如何使用VolcEngine的MaaSLLM模型。我们将从安装库开始,然后深入到具体的代码实现,最后分析其应用场景及实践建议。技术背景介绍VolcEngine(火山引擎)提供了一个强大的MaaS(ModelasaService)平台,支持多种语言模型。这个平台旨在让开发者更容易地集成和使用先进的自然语言处理能力。通过VolcEngine,开发者可以轻松实现文本生成、文
《宠物经济崛起:小萌宠,大市场》
javascript
宠物经济,火爆来袭!家人们,最近刷新闻,是不是被各种宠物相关的消息刷屏啦?前阵子看到一则数据,2024年宠物市场规模竟然突破3000亿大关!这数字,简直太惊人了,感觉宠物经济这股风,越刮越猛,都快把我“吹晕”了!就说我身边,以前出门偶尔看到一两只宠物,现在满大街都是“铲屎官”带着自家宝贝溜达。而且大家对宠物那叫一个舍得,吃的是进口天然粮,穿的是定制小衣服,生病去宠物医院,花个上千块眼睛都不眨一下。
如何使用 Python 连接 MySQL 数据库?
程序员黄同学
Python面试题 Python 数据库 数据库 python mysql
在Python开发中,连接MySQL数据库是一个常见的需求。我们可以使用多种库来实现这一功能,其中最常用的是mysql-connector-python和PyMySQL。下面我将详细介绍如何使用这两个库来连接MySQL数据库,并提供一些实际开发中的建议和注意事项。1.使用mysql-connector-python连接MySQL数据库mysql-connector-python是MySQL官方提供
Vue3 源码解析(六):响应式原理与 reactive
今天这篇文章是笔者会带着大家一起深入剖析Vue3的响应式原理实现,以及在响应式基础API中的reactive是如何实现的。对于Vue框架来说,其非侵入的响应式系统是最独特的特性之一了,所以不论任何一个版本的Vue,在熟悉其基础用法后,响应式原理都是笔者最想优先了解的部分,也是阅读源码时必细细研究的部分。毕竟知己知彼百战不殆,当你使用Vue时,掌握了响应式原理一定会让你的coding过程更加游刃有余
Tailwind CSS—骨架屏生成器
前端javascript
CSS技巧与案例详解vue2与vue3技巧合集VueUse源码解读使用TailwindCSS快速创建现代化的骨架屏,只需要这个简单的工具。我一直在寻找方法,让我的网站更加引人入胜和用户友好。其中最简单而又最有效的方法之一,就是加入骨架加载器——那些灰色的、闪烁的方框,在内容加载时显示。它们帮助用户获得更流畅的体验,让他们觉得网站加载速度比实际快。这些骨架加载器是一个不错的补充,但从零开始设计它们却
人工智能和云计算带来的技术变革:人工智能实现自动化营销的方式
AI天才研究院
AI实战 AI大模型企业级应用开发实战 大数据 人工智能 语言模型 AI LLM Java Python 架构设计 Agent RPA
1.背景介绍随着人工智能(AI)和云计算技术的不断发展,我们正面临着一场技术革命。这场革命正在改变我们的生活方式、工作方式和商业模式。在这篇文章中,我们将探讨人工智能如何实现自动化营销的方式,并深入了解其背后的核心概念、算法原理、代码实例等。1.1人工智能简介人工智能是一种计算机科学的分支,旨在让计算机具有人类智能的能力,如学习、推理、感知、语言理解等。人工智能的目标是让计算机能够理解自然语言、解
使用 Nocalhost 开发 Rainbond 上的微服务应用
u012804784
android 微服务 microservices 架构 计算机
优质资源分享学习路线指引(点击解锁)知识定位人群定位Python实战微信订餐小程序进阶级本课程是pythonflask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。Python量化交易实战入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统本文将介绍如何使用Nocalhost快速开发Rainbond上的微服务应用的开发流程以及实践操作步骤。Nocalhost可
Dapr 远程调试之 Nocalhost
虚幻私塾
python 计算机
优质资源分享学习路线指引(点击解锁)知识定位人群定位Python实战微信订餐小程序进阶级本课程是pythonflask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。Python量化交易实战入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统虽然Visualstudio、Visualstudiocode都支持debug甚至远程debug,Dapr搭配Bridge
在JPA中,使用实体图查询具有自定义中间表的多对多实体
ForteScarlet
水文罢了 java hibernate spring spring boot jpa
大家好哇!不知道大家在使用JPA的时候有没有试用过实体图(EntityGraph)进行查询呢?它的功能很强大,比如可以用来规避大家经常遇到的n+1的问题。那么你了不了解如何在"自定义中间表"的情况下去使用实体图查询呢?如果不太了解,那么就来跟着我看一下吧!为了方便演示,后续的项目环境默认视为在spring-boot-starter-data-jpa中喔~实体定义首先,我们先来看看普通的多对多实体是
insight在线需求分析系统概要介绍
reddishz
需求分析 需求分析
提升项目效率和产品质量,从需求分析开始——Insight需求分析工具,让产品规划从未如此简单!在当今快节奏的商业环境中,项目管理的成功与否往往取决于需求分析的精准度和管理的高效性。无论是软件开发、产品设计还是大型项目实施,需求分析都是项目成功的基石。今天,我们为您带来一款强大的需求分析工具——Insighthttps://srs.pub/insight/,它将彻底改变您的项目和产品管理方式,让项目
使用 pgvector 实现 PostgreSQL 语义搜索和 RAG:完整指南
m0_74825260
面试 学习路线 阿里巴巴 postgresql 数据库
使用pgvector实现PostgreSQL语义搜索和RAG:完整指南1.引言在当今的数据驱动世界中,能够高效地搜索和检索相关信息变得越来越重要。传统的关系型数据库虽然在结构化数据管理方面表现出色,但在处理非结构化数据和语义搜索时往往力不从心。本文将介绍如何使用pgvector扩展来增强PostgreSQL数据库,实现语义搜索和检索增强生成(RAG)功能,从而大大提升数据检索的效率和准确性。2.p
【探索前端技术之 React Three.js—— 简单的人脸动捕与 3D 模型表情同步应用】
智界工具库
react.js javascript 前端
大家好,我是智界工具库,致力于分享好用实用且智能的软件以及在JAVA语言开发中遇到的问题,如果本篇文章对你有所帮助请帮我点个小赞小收藏吧,谢谢喲!简介:React是一个用于构建用户界面的JavaScript框架,以其组件化的设计和高效的更新机制而闻名。Three.js则是一个基于JavaScript的3D图形库,能够轻松创建和渲染复杂的3D场景。当React与Three.js相遇,ReactThr
踩坑热修复框架Tinker
小蜗牛在漫步
Tinker是什么Tinker是微信官方的Android热补丁解决方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新。当然,你也可以使用Tinker来更新你的插件。为什么使用Tinker当前市面的热补丁方案有很多,其中比较出名的有阿里的AndFix、美团的Robust以及QZone的超级补丁方案。但它们都存在无法解决的问题,这也是正是使用Tinker的原因。总的来
使用 pgvector 将 PostgreSQL 与语义搜索/RAG 集成的教程
azzxcvhj
postgresql 人工智能 数据库 python
技术背景介绍在大语言模型(LLMs)和语义搜索的兴起中,结合结构化的关系型数据库(如PostgreSQL)进行增强型查询变得越来越有价值。这种方法常用于RAG(Retrieval-AugmentedGeneration)场景,例如FAQ问答、文档检索、推荐系统等。pgvector是用于PostgreSQL的一个扩展,它支持稠密向量的存储和操作。通过pgvector,可以将嵌入向量直接存储在数据库中
JAVA基础
灵静志远
位运算 加载 Date 字符串池 覆盖
一、类的初始化顺序
1 (静态变量,静态代码块)-->(变量,初始化块)--> 构造器
同一括号里的,根据它们在程序中的顺序来决定。上面所述是同一类中。如果是继承的情况,那就在父类到子类交替初始化。
二、String
1 String a = "abc";
JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的对象,根
keepalived实现redis主从高可用
bylijinnan
redis
方案说明
两台机器(称为A和B),以统一的VIP对外提供服务
1.正常情况下,A和B都启动,B会把A的数据同步过来(B is slave of A)
2.当A挂了后,VIP漂移到B;B的keepalived 通知redis 执行:slaveof no one,由B提供服务
3.当A起来后,VIP不切换,仍在B上面;而A的keepalived 通知redis 执行slaveof B,开始
java文件操作大全
0624chenhong
java
最近在博客园看到一篇比较全面的文件操作文章,转过来留着。
http://www.cnblogs.com/zhuocheng/archive/2011/12/12/2285290.html
转自http://blog.sina.com.cn/s/blog_4a9f789a0100ik3p.html
一.获得控制台用户输入的信息
&nbs
android学习任务
不懂事的小屁孩
工作
任务
完成情况 搞清楚带箭头的pupupwindows和不带的使用 已完成 熟练使用pupupwindows和alertdialog,并搞清楚两者的区别 已完成 熟练使用android的线程handler,并敲示例代码 进行中 了解游戏2048的流程,并完成其代码工作 进行中-差几个actionbar 研究一下android的动画效果,写一个实例 已完成 复习fragem
zoom.js
换个号韩国红果果
oom
它的基于bootstrap 的
https://raw.github.com/twbs/bootstrap/master/js/transition.js transition.js模块引用顺序
<link rel="stylesheet" href="style/zoom.css">
<script src=&q
详解Oracle云操作系统Solaris 11.2
蓝儿唯美
Solaris
当Oracle发布Solaris 11时,它将自己的操作系统称为第一个面向云的操作系统。Oracle在发布Solaris 11.2时继续它以云为中心的基调。但是,这些说法没有告诉我们为什么Solaris是配得上云的。幸好,我们不需要等太久。Solaris11.2有4个重要的技术可以在一个有效的云实现中发挥重要作用:OpenStack、内核域、统一存档(UA)和弹性虚拟交换(EVS)。
spring学习——springmvc(一)
a-john
springMVC
Spring MVC基于模型-视图-控制器(Model-View-Controller,MVC)实现,能够帮助我们构建像Spring框架那样灵活和松耦合的Web应用程序。
1,跟踪Spring MVC的请求
请求的第一站是Spring的DispatcherServlet。与大多数基于Java的Web框架一样,Spring MVC所有的请求都会通过一个前端控制器Servlet。前
hdu4342 History repeat itself-------多校联合五
aijuans
数论
水题就不多说什么了。
#include<iostream>#include<cstdlib>#include<stdio.h>#define ll __int64using namespace std;int main(){ int t; ll n; scanf("%d",&t); while(t--)
EJB和javabean的区别
asia007
bean ejb
EJB不是一般的JavaBean,EJB是企业级JavaBean,EJB一共分为3种,实体Bean,消息Bean,会话Bean,书写EJB是需要遵循一定的规范的,具体规范你可以参考相关的资料.另外,要运行EJB,你需要相应的EJB容器,比如Weblogic,Jboss等,而JavaBean不需要,只需要安装Tomcat就可以了
1.EJB用于服务端应用开发, 而JavaBeans
Struts的action和Result总结
百合不是茶
struts Action配置 Result配置
一:Action的配置详解:
下面是一个Struts中一个空的Struts.xml的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
&quo
如何带好自已的团队
bijian1013
项目管理 团队管理 团队
在网上看到博客"
怎么才能让团队成员好好干活"的评论,觉得写的比较好。 原文如下: 我做团队管理有几年了吧,我和你分享一下我认为带好团队的几点:
1.诚信
对团队内成员,无论是技术研究、交流、问题探讨,要尽可能的保持一种诚信的态度,用心去做好,你的团队会感觉得到。 2.努力提
Java代码混淆工具
sunjing
ProGuard
Open Source Obfuscators
ProGuard
http://java-source.net/open-source/obfuscators/proguardProGuard is a free Java class file shrinker and obfuscator. It can detect and remove unused classes, fields, m
【Redis三】基于Redis sentinel的自动failover主从复制
bit1129
redis
在第二篇中使用2.8.17搭建了主从复制,但是它存在Master单点问题,为了解决这个问题,Redis从2.6开始引入sentinel,用于监控和管理Redis的主从复制环境,进行自动failover,即Master挂了后,sentinel自动从从服务器选出一个Master使主从复制集群仍然可以工作,如果Master醒来再次加入集群,只能以从服务器的形式工作。
什么是Sentine
使用代理实现Hibernate Dao层自动事务
白糖_
DAO spring AOP 框架 Hibernate
都说spring利用AOP实现自动事务处理机制非常好,但在只有hibernate这个框架情况下,我们开启session、管理事务就往往很麻烦。
public void save(Object obj){
Session session = this.getSession();
Transaction tran = session.beginTransaction();
try
maven3实战读书笔记
braveCS
maven3
Maven简介
是什么?
Is a software project management and comprehension tool.项目管理工具
是基于POM概念(工程对象模型)
[设计重复、编码重复、文档重复、构建重复,maven最大化消除了构建的重复]
[与XP:简单、交流与反馈;测试驱动开发、十分钟构建、持续集成、富有信息的工作区]
功能:
编程之美-子数组的最大乘积
bylijinnan
编程之美
public class MaxProduct {
/**
* 编程之美 子数组的最大乘积
* 题目: 给定一个长度为N的整数数组,只允许使用乘法,不能用除法,计算任意N-1个数的组合中乘积中最大的一组,并写出算法的时间复杂度。
* 以下程序对应书上两种方法,求得“乘积中最大的一组”的乘积——都是有溢出的可能的。
* 但按题目的意思,是要求得这个子数组,而不
读书笔记-2
chengxuyuancsdn
读书笔记
1、反射
2、oracle年-月-日 时-分-秒
3、oracle创建有参、无参函数
4、oracle行转列
5、Struts2拦截器
6、Filter过滤器(web.xml)
1、反射
(1)检查类的结构
在java.lang.reflect包里有3个类Field,Method,Constructor分别用于描述类的域、方法和构造器。
2、oracle年月日时分秒
s
[求学与房地产]慎重选择IT培训学校
comsci
it
关于培训学校的教学和教师的问题,我们就不讨论了,我主要关心的是这个问题
培训学校的教学楼和宿舍的环境和稳定性问题
我们大家都知道,房子是一个比较昂贵的东西,特别是那种能够当教室的房子...
&nb
RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系
daizj
oracle rman filesperset PARALLELISM
RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系 转
PARALLELISM ---
我们还可以通过parallelism参数来指定同时"自动"创建多少个通道:
RMAN > configure device type disk parallelism 3 ;
表示启动三个通道,可以加快备份恢复的速度。
简单排序:冒泡排序
dieslrae
冒泡排序
public void bubbleSort(int[] array){
for(int i=1;i<array.length;i++){
for(int k=0;k<array.length-i;k++){
if(array[k] > array[k+1]){
初二上学期难记单词三
dcj3sjt126com
sciet
concert 音乐会
tonight 今晚
famous 有名的;著名的
song 歌曲
thousand 千
accident 事故;灾难
careless 粗心的,大意的
break 折断;断裂;破碎
heart 心(脏)
happen 偶尔发生,碰巧
tourist 旅游者;观光者
science (自然)科学
marry 结婚
subject 题目;
I.安装Memcahce 1. 安装依赖包libevent Memcache需要安装libevent,所以安装前可能需要执行 Shell代码 收藏代码
dcj3sjt126com
redis
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make
前面3步应该没有问题,主要的问题是执行make的时候,出现了异常。
异常一:
make[2]: cc: Command not found
异常原因:没有安装g
并发容器
shuizhaosi888
并发容器
通过并发容器来改善同步容器的性能,同步容器将所有对容器状态的访问都串行化,来实现线程安全,这种方式严重降低并发性,当多个线程访问时,吞吐量严重降低。
并发容器ConcurrentHashMap
替代同步基于散列的Map,通过Lock控制。
&nb
Spring Security(12)——Remember-Me功能
234390216
Spring Security Remember Me 记住我
Remember-Me功能
目录
1.1 概述
1.2 基于简单加密token的方法
1.3 基于持久化token的方法
1.4 Remember-Me相关接口和实现
位运算
焦志广
位运算
一、位运算符C语言提供了六种位运算符:
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移
1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&am
nodejs 数据库连接 mongodb mysql
liguangsong
mongodb mysql node 数据库连接
1.mysql 连接
package.json中dependencies加入
"mysql":"~2.7.0"
执行 npm install
在config 下创建文件 database.js
java动态编译
olive6615
java HotSpot jvm 动态编译
在HotSpot虚拟机中,有两个技术是至关重要的,即动态编译(Dynamic compilation)和Profiling。
HotSpot是如何动态编译Javad的bytecode呢?Java bytecode是以解释方式被load到虚拟机的。HotSpot里有一个运行监视器,即Profile Monitor,专门监视
Storm0.9.5的集群部署配置优化
roadrunners
优化 storm.yaml
nimbus结点配置(storm.yaml)信息:
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional inf
101个MySQL 的调节和优化的提示
tomcat_oracle
mysql
1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中——在内存中访问文件时的速度要比在硬盘中访问时快的多。 2. 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读取的,它的速度很慢。 3. 使用电池供电的RAM(注:RAM即随机存储器)。 4. 使用高级的RAID(注:Redundant Arrays of Inexpensive Disks,即磁盘阵列
zoj 3829 Known Notation(贪心)
阿尔萨斯
ZOJ
题目链接:zoj 3829 Known Notation
题目大意:给定一个不完整的后缀表达式,要求有2种不同操作,用尽量少的操作使得表达式完整。
解题思路:贪心,数字的个数要要保证比∗的个数多1,不够的话优先补在开头是最优的。然后遍历一遍字符串,碰到数字+1,碰到∗-1,保证数字的个数大于等1,如果不够减的话,可以和最后面的一个数字交换位置(用栈维护十分方便),因为添加和交换代价都是1