java jts点到面的距离_jts-空间索引

article/2025/8/15 3:00:20

前言:

如果您对JTS这三个词还是没有一个概念,那么推荐您关注一下sinoly的博客。这个我能够找到为数不多的关于jts的中文资料。

http://www.blogjava.net/sinoly/archive/2007/02/09/99042.html

下面这段话就是摘抄自sinoly老兄的博客:

............它主要是完成了java对几何对象、空间拓扑得核心操作算法。.......集成了java对几何对象(点、线、面等)的对象管理外更大一部分工作是在完成对各种几何对象的buffer、analyze以及空间索引.

本文想要向您展示的就是一个空间索引的小小demo!

jts本身有一个包就叫Index,当中分别给出了SpatialIndex接口的几个实现。本文展现的就是quadtree的用法。

quadtree翻译过来就是四叉树的意思,有一个很简单的例子可以来理解四叉树和空间索引的关系。那就是把中国的版图来个十字型的分割,这样就形成一个中心点和四个子节点。然后将每个子节点再次的进行十字分割。当分割到极小处时,整个中国的版图就可以使用一个挂载很多节点的四叉树来表示。每一个节点可以认为是一个具有经纬度及其描述信息的对象。

当我们手中有很多点的时候,想要建立成一颗四叉树,只要把上边的思路反过来就可以了(对于每个节点之间的距离是否相等,目前我还没有好的认识)。

正如我们研发部local search的文斌而言,思路很简单,但是不是每个人你都能够实现。接下来,让demo的代码说话。

1.建立一个对象,这个对象描述point除了经纬度外的其他信息(如果需要可以加上经纬度)。

1

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif/** *//**2d18c02628675d0a2c816449d98bda930.png *3d18c02628675d0a2c816449d98bda930.png *@authorlang4d18c02628675d0a2c816449d98bda930.png * @date 2007-12-175d18c02628675d0a2c816449d98bda930.png * @email lanfanss@126.com6d18c02628675d0a2c816449d98bda930.png * @desc 代表point的信息7d18c02628675d0a2c816449d98bda930.png *@since8d18c02628675d0a2c816449d98bda930.png *98f1ba5b45633e9678d1db480c16cae3f.png*/101fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicclassPointInfo9b8a8a44dd1c74ae49c20a7cd451974e.png{1197e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/** *//**12d18c02628675d0a2c816449d98bda930.png     * 名称13ecedf933ec37d714bd4c2545da43add2.png*/14d18c02628675d0a2c816449d98bda930.pngprivateString name;15d18c02628675d0a2c816449d98bda930.pngprivateString info;16d18c02628675d0a2c816449d98bda930.png1797e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicString getInfo()9b8a8a44dd1c74ae49c20a7cd451974e.png{18d18c02628675d0a2c816449d98bda930.pngreturninfo;19ecedf933ec37d714bd4c2545da43add2.png    }20d18c02628675d0a2c816449d98bda930.png2197e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoidsetInfo(String info)9b8a8a44dd1c74ae49c20a7cd451974e.png{22d18c02628675d0a2c816449d98bda930.pngthis.info=info;23ecedf933ec37d714bd4c2545da43add2.png    }24d18c02628675d0a2c816449d98bda930.png2597e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicPointInfo(String name)9b8a8a44dd1c74ae49c20a7cd451974e.png{26d18c02628675d0a2c816449d98bda930.pngsuper();27d18c02628675d0a2c816449d98bda930.pngthis.name=name;28ecedf933ec37d714bd4c2545da43add2.png    }29d18c02628675d0a2c816449d98bda930.png3097e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicString getName()9b8a8a44dd1c74ae49c20a7cd451974e.png{31d18c02628675d0a2c816449d98bda930.pngreturnname;32ecedf933ec37d714bd4c2545da43add2.png    }33d18c02628675d0a2c816449d98bda930.png3497e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoidsetName(String name)9b8a8a44dd1c74ae49c20a7cd451974e.png{35d18c02628675d0a2c816449d98bda930.pngthis.name=name;36ecedf933ec37d714bd4c2545da43add2.png    }378f1ba5b45633e9678d1db480c16cae3f.png}

2.接下来就是建立一颗树,代码如下

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicstaticvoidmain(String[] args)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        Quadtree quatree=newQuadtree();

d18c02628675d0a2c816449d98bda930.png//构建几个点d18c02628675d0a2c816449d98bda930.pngPointInfo info1=newPointInfo("故宫");

d18c02628675d0a2c816449d98bda930.png        quatree.insert(newEnvelope(newCoordinate(11638937,3992178)), info1);

d18c02628675d0a2c816449d98bda930.png        PointInfo info2=newPointInfo("太和殿");

d18c02628675d0a2c816449d98bda930.png        info2

d18c02628675d0a2c816449d98bda930.png                .setInfo("太和殿,俗称金銮殿,是宫殿群中最大的建筑。殿高36米,宽63米,面积为2380平方米。 “太和”语出《周易》,太和是“阴阳会和,冲和之气也”,“混同宇内以玉太和”之意,即指宇宙万物,和谐圆满。太和殿坐落在“工”字形须弥座上,汉白玉雕成,分上中下三层,称为丹墀或丹陛。雕栏称为望柱,柱头雕以云龙云图案。那些伸出的为螭首,口中小孔为出水孔。共有螭首1142个。如遇雨天,可见千龙吐水之奇观。 台基上放置18个大铜炉,据说代表当时的18个省份。太和殿台基上面的大平台,放置铜龟、铜鹤各一对,象征“龟鹤千秋”,意为长寿。东有日晷西有喜量,象征皇权公正平允。这里是举行大典奏九韶之乐的地方。");

d18c02628675d0a2c816449d98bda930.png        quatree.insert(newEnvelope(newCoordinate(11639073,3991605)), info2);

d18c02628675d0a2c816449d98bda930.png        PointInfo info3=newPointInfo("中和殿");

d18c02628675d0a2c816449d98bda930.png        info3

d18c02628675d0a2c816449d98bda930.png                .setInfo("中和殿在太和殿后,平面呈方形。“中和”语出《礼记.中庸》,指不偏不倚,凡事做到恰如其分。 殿为方形攒尖顶,在三大殿中居中,也最小,是皇帝去太和殿大典之前休息的地方。皇帝去天、地、日、月四坛祭祀时,前一天也要在中和殿里看祭文。每年二月皇帝到先农坛举行亲耕仪式,前一天要来这里阅视种子、农具、祝文。这里现陈列的是乾隆年间的两顶肩舆,即八抬大轿。");

d18c02628675d0a2c816449d98bda930.png        quatree.insert(newEnvelope(newCoordinate(11639081,3991647)), info3);

d18c02628675d0a2c816449d98bda930.png        PointInfo info4=newPointInfo("保和殿");

d18c02628675d0a2c816449d98bda930.png        info4

d18c02628675d0a2c816449d98bda930.png                .setInfo("保和殿,其意为“志不外驰,恬神守志”,就是说神志得专一,以保持宇内的和谐,才能福寿安乐,天下太平。 保和殿比太和殿规模小些,为重檐歇山顶。明朝册立皇后,太子时,皇帝在此殿受贺。在清朝是举行盛大宴会的地方。每年初一和十五在此宴请外族王公大臣,场面是十分壮观的。公主下嫁时,也在这个殿里宴请附马。这个殿最有名的事是举行殿试。殿试就是皇帝本人亲自监考、主考,是科举考试的最高层次。前三名分别为状元、榜眼、探花。 保和殿后是故宫最大的一块雕石——云龙雕石,这块苑叶青石长16.57米,宽3.07米,厚1.7米,总重二百多吨。上雕游龙,双龙戏珠,游于云雾之中。");

d18c02628675d0a2c816449d98bda930.png        quatree.insert(newEnvelope(newCoordinate(11639079,3991698)), info4);

d18c02628675d0a2c816449d98bda930.png        PointInfo info5=newPointInfo("乾清宫");

d18c02628675d0a2c816449d98bda930.png        info5

d18c02628675d0a2c816449d98bda930.png                .setInfo("乾清宫明朝时为皇帝居住之处,皇帝在此处理政务、召见臣仆和外国使节。从清朝雍正皇帝之后,皇帝迁到养心殿居住,但仍在此批阅奏报,召见大臣。 乾清宫除是皇帝的寝宫和日常自理政务外,还举行元旦、灯节、端午、中秋、冬至、万寿等节的家宴。殿内宝座上方有一块匾,上书“正大光明”四个漂亮的正楷字,其意为公正、光明磊落。这块匾很有名气,与秘密立储关系密切。皇帝生前,亲自从皇子中选一个德才兼备的作为皇太子——嗣皇帝,不予宣布,而是由皇帝秘密亲书预立皇太子的名字的“御书”,密封匣内,茂于那块匾后,等皇帝死后或死前,由御前大臣、军机大臣等共同启示,按御书所定,嗣皇帝即位。相传雍正的第四子弘历即乾隆皇帝,就是这…");

d18c02628675d0a2c816449d98bda930.png        quatree.insert(newEnvelope(newCoordinate(11639067,3991873)), info5);

d18c02628675d0a2c816449d98bda930.png        PointInfo info6=newPointInfo("坤宁宫");

d18c02628675d0a2c816449d98bda930.png        quatree.insert(newEnvelope(newCoordinate(11639067,3991907)), info6);

d18c02628675d0a2c816449d98bda930.png//几个离故宫较远的点d18c02628675d0a2c816449d98bda930.pngPointInfo info7=newPointInfo("香山公园");

d18c02628675d0a2c816449d98bda930.png        quatree.insert(newEnvelope(newCoordinate(11619151,3999031)), info7);

d18c02628675d0a2c816449d98bda930.png        PointInfo info8=newPointInfo("香山寺");

d18c02628675d0a2c816449d98bda930.png        quatree.insert(newEnvelope(newCoordinate(11619150,3999039)), info8);

d18c02628675d0a2c816449d98bda930.png        PointInfo info9=newPointInfo("眼镜湖");

d18c02628675d0a2c816449d98bda930.png        quatree.insert(newEnvelope(newCoordinate(11618154,3999566)), info9);

当中需要说明的部分如下:

quatree.insert(new Envelope(new Coordinate(11638937, 3992178)), info1);

当中的Coordinate代表了一个只是包含经纬度的点(point)。在jts中,还有另外一个专门的对象表示点,就是point对象,但是这里我们只是想用经纬度来建立好节点之间的关系,故而只是采用了Coordinate。

而Envelope,这个对象其实代表的是一个矩形框。可能是因为信封就是一个矩形框的原因,所以,加拿大人就用这个单词来表示矩形了。Envelope的构造函数中需要给出矩形的对角坐标。但是我们这里只是有一个点,所以,jts会把这一个单独的点也作为一个矩形。

这就是说明,jts中结点不是简单的point,而是一个矩形(Envelope)。

至于最后的info,则是表示点的其他描述信息。

需要补充的是,jts目前只是支持二维,三维的z坐标永远是0。

3. 建立一颗树的目的不是等待他发芽,而是为了搜索(everyone has his purpose!)

quatree 提供了三个搜索方法,签名分别如下:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicList query(Envelope searchEnv)9b8a8a44dd1c74ae49c20a7cd451974e.png{

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/** *//**d18c02628675d0a2c816449d98bda930.png         * the items that are matched are the items in quads which overlap the

d18c02628675d0a2c816449d98bda930.png         * search envelope

ecedf933ec37d714bd4c2545da43add2.png*/d18c02628675d0a2c816449d98bda930.png        ArrayListVisitor visitor=newArrayListVisitor();

d18c02628675d0a2c816449d98bda930.png        query(searchEnv, visitor);

d18c02628675d0a2c816449d98bda930.pngreturnvisitor.getItems();

8f1ba5b45633e9678d1db480c16cae3f.png    }4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicvoidquery(Envelope searchEnv, ItemVisitor visitor)9b8a8a44dd1c74ae49c20a7cd451974e.png{

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/** *//**d18c02628675d0a2c816449d98bda930.png         * the items that are matched are the items in quads which overlap the

d18c02628675d0a2c816449d98bda930.png         * search envelope

ecedf933ec37d714bd4c2545da43add2.png*/d18c02628675d0a2c816449d98bda930.png        root.visit(searchEnv, visitor);

8f1ba5b45633e9678d1db480c16cae3f.png    }4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif/** *//**d18c02628675d0a2c816449d98bda930.png     * Return a list of all items in the Quadtree

8f1ba5b45633e9678d1db480c16cae3f.png*/1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicList queryAll()9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        List foundItems=newArrayList();

d18c02628675d0a2c816449d98bda930.png        root.addAllItems(foundItems);

d18c02628675d0a2c816449d98bda930.pngreturnfoundItems;

8f1ba5b45633e9678d1db480c16cae3f.png    }

每个函数的含义也是很简单的,分别表示搜索范围搜索,范围过滤搜索和全部搜索。

接下来我们就分别尝试分为搜索和范围过滤搜索:

范围搜索很简单,只要给出一个矩形框,然后传入就可以了,代码如下:

4f1150b881333f12a311ae9ef34da474.png//看看在故宫旁边能够找到什么4f1150b881333f12a311ae9ef34da474.pngSystem.out.println("看看在故宫旁边能够找到什么");

4f1150b881333f12a311ae9ef34da474.png        Listpoints=quatree.query(newEnvelope(newCoordinate(

4f1150b881333f12a311ae9ef34da474.png11638937,3992178)));

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.giffor(PointInfo pointInfo : points)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png//结果是什么,居然就是故宫一个结果d18c02628675d0a2c816449d98bda930.pngSystem.out.println(pointInfo.getName());

8f1ba5b45633e9678d1db480c16cae3f.png        }4f1150b881333f12a311ae9ef34da474.png//只能够调整经纬度,来看看故宫周围有什么4f1150b881333f12a311ae9ef34da474.pngSystem.out.println("=================================");

4f1150b881333f12a311ae9ef34da474.png        System.out.println("只能够调整经纬度,来看看故宫周围有什么,这个就相当于地图上的周边搜索的概念");

4f1150b881333f12a311ae9ef34da474.png        points=quatree.query(newEnvelope(newCoordinate(11638937,3991605),

4f1150b881333f12a311ae9ef34da474.pngnewCoordinate(11639081,3992178)));

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.giffor(PointInfo pointInfo : points)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png//结果是什么?d18c02628675d0a2c816449d98bda930.pngSystem.out.println(pointInfo.getName());

8f1ba5b45633e9678d1db480c16cae3f.png        }

可以看到,当只是输入故宫的点的时候,结果只是一个故宫。所以,我就找了一范围来搜,模拟文斌在http://www.51ditu.com上实现的那个周边搜索的概念。结果会是什么呢?

说起周边搜索,不可能没有关键词,比如我们经常在群里说得那个搜索模式,我想知道在上地周边哪里有好的酒吧,下班后可以去喝一杯!

这就是周边过滤搜索的概念了。

quadtree存在着这样的一个方法:

public void query(Envelope searchEnv, ItemVisitor visitor) ,这个当中的ItemVisitor 是一个接口。实现的类似于一个访问者的功能,挨个询问过路人:“你可见到戈多,我在等他”!我们可以看一下默认的ArrayListVisitor。看后,也会觉得jts在这个地方多此一举了。

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif/** *//**d18c02628675d0a2c816449d98bda930.png *@version1.7

8f1ba5b45633e9678d1db480c16cae3f.png*/4f1150b881333f12a311ae9ef34da474.pngpublicclassArrayListVisitor

4f1150b881333f12a311ae9ef34da474.pngimplementsItemVisitor

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.pngprivateArrayList items=newArrayList();

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicArrayListVisitor()9b8a8a44dd1c74ae49c20a7cd451974e.png{

ecedf933ec37d714bd4c2545da43add2.png  }d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.pngpublicvoidvisitItem(Object item)

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png    items.add(item);

ecedf933ec37d714bd4c2545da43add2.png  }d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicArrayList getItems()9b8a8a44dd1c74ae49c20a7cd451974e.png{returnitems; }d18c02628675d0a2c816449d98bda930.png

8f1ba5b45633e9678d1db480c16cae3f.png}

可以看到,这个类对于过路人什么都没有问。

接下来,我就仿照着实现一个询问器,问问那个宫殿中悬挂着“正大光明”牌匾。

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicvoidvisitItem(Object item)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        PointInfo info=(PointInfo) item;

d18c02628675d0a2c816449d98bda930.pngif(info.getInfo()!=null&&!"".equals(info.getInfo())

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif&&info.getInfo().contains("正大光明"))9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png            items.add(item);

ecedf933ec37d714bd4c2545da43add2.png        }8f1ba5b45633e9678d1db480c16cae3f.png    }

最后在quatree中用法如下:

4f1150b881333f12a311ae9ef34da474.png//既然可以实现周边搜索,那么就可以在故宫旁边搜索那个宫殿中含有正大光明的牌匾4f1150b881333f12a311ae9ef34da474.pngSystem.out.println("=================================");

4f1150b881333f12a311ae9ef34da474.png        System.out.println("既然可以实现周边搜索,那么就可以在故宫旁边搜索那个宫殿中含有正大光明的牌匾");

4f1150b881333f12a311ae9ef34da474.png        UseArrayListVisitor visitor=newUseArrayListVisitor();

4f1150b881333f12a311ae9ef34da474.png        quatree.query(newEnvelope(newCoordinate(11638937,3991605),

4f1150b881333f12a311ae9ef34da474.pngnewCoordinate(11639081,3992178)), visitor);

4f1150b881333f12a311ae9ef34da474.png        points=visitor.getItems();

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.giffor(PointInfo pointInfo : points)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png//结果是什么?d18c02628675d0a2c816449d98bda930.pngSystem.out.println(pointInfo.getName());

8f1ba5b45633e9678d1db480c16cae3f.png        }

结果是什么呢,当然就是乾清宫!

可以说,Jts是一个优雅的空间实用包,但是如果我在刚才过滤器中搜索的词不是那么简单呢,我想向文本搜索一样牵涉到分词,排序的概念呢。

如果我真的要在中国范围内找某一个酒吧呢?

我对于这些问题的一个思路就是,让lucene和jts合作!不过这是下一篇博客的内容了。

posted on 2007-12-21 13:47 张氏兄弟 阅读(3516) 评论(3)  编辑  收藏 所属分类: 51ditu.com


http://chatgpt.dhexx.cn/article/KuY2QDLW.shtml

相关文章

JTS Geometry关系判断和分析

关系判断 Geometry之间的关系有如下几种: 相等(Equals): 几何形状拓扑上相等。 脱节(Disjoint): 几何形状没有共有的点。 相交(Intersects): 几何形状至少有一个共有点(区别于脱节) 接触(Touches)&a…

JTS Geometry用例分析

微信搜索:“二十同学” 公众号,欢迎关注一条不一样的成长之路 拓扑关系 GeometryTest import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryCollection; import…

JTS 笔记

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

jts 简介、中文文档、中英对照文档 下载

jts 文档 下载链接(含jar包、源码、pom) 组件名称中文-文档-下载链接中英对照-文档-下载链接jts-1.13.jarjts-1.13-API文档-中文版.zipjts-1.13-API文档-中英对照版.zip jts 简介 JTS拓扑套件 JTS拓扑套件是一个用于建模和操作二维线性几何的API。它…

GeoTools——JTS的相关介绍和操作

GeoTools——JTS的相关介绍&#xff08;一&#xff09; JTS拓扑套件是GeoTools用于提供Geometry数据结构的实现&#xff0c;Geometry主要是指几何形状。 想要使用geoTools——JTS相关的操作可以导入以下的依赖<properties><geotools.version>17.1</geotools.ver…

java topo: 开源jtopo框架

java web 非本人研究方向&#xff0c;只是作为拓展知识涉猎范围 原文链接&#xff1a;http://www.jtopo.com/index.html jTopo是什么? jTopo&#xff08;Javascript Topology library)是一款完全基于HTML5 Canvas的关系、拓扑图形化界面开发工具包。 jTopo关注于数据的图形展…

JTopo踩坑记 -- React项目中使用JTopo

JTopo踩坑记 – React项目中使用JTopo JTopo-in-node & JTopo 最近实习公司一个项目需要绘制电网的拓扑图&#xff0c;大致要求的效果如下&#xff1a; 首先想到的是Echarts和d3&#xff0c;因为这个项目其他图表都是使用的Echarts&#xff0c; 但是在Echarts的官方示例…

jtopo的项目实战(七)

话接上回&#xff0c;继续实现jtopo本身不具有的一些功能&#xff0c;有讲的不对的地方&#xff0c;欢迎大家在评论区留言提出&#xff0c;博主基本每天在线&#xff0c;看到都会及时回复的&#xff0c;我们一起进步&#xff0c;奥利给&#xff0c;还有&#xff0c;码字不易&am…

关于vue3.0项目引入jtopo出现的各种问题汇总

jtopo官网demo网址&#xff1a;http://www.jtopo.com/demo.html 最近的项目需要用到jtopo&#xff0c;关于jtopo的引入&#xff0c;之前自己也都尝试过&#xff0c;没想到这次引入会出现这么多问题&#xff0c;所以大概总结一下 1、借用同事以前的经验来引入 npm install jto…

JTopo 框架教程之一:初始JTopo 框架

JTopo 是什么&#xff1f; JTopo&#xff08;Javascript Topology library)是一款完全基于HTML5 Canvas的关系、拓扑图形化界面开发工具包。jTopo关注于数据的图形展示&#xff0c;它是面向开发人员的&#xff0c;需要进行二次开发。使用jTopo很简单&#xff0c;可以快速创建一…

jtopo的项目实战(一)

前言 初识jtopo是因为项目中需要一个能够动态绘制网络拓扑图的插件&#xff0c;不但能画出基本的网络拓扑结构&#xff0c;还要能够标识出网络设备的类型以及端口设置&#xff0c;甚至是网络连线的流量信息等&#xff0c;基于这个需求查找了很多资料&#xff0c;初步选中了几款…

jtopo的项目实战(二)

话接上回&#xff0c;继续实现jtopo本身不具有的一些功能&#xff0c;有讲的不对的地方&#xff0c;欢迎大家留言提出&#xff0c;我们一起进步&#xff0c;奥利给&#xff0c;还有&#xff0c;码字不易&#xff0c;如果觉得博主写的不错的欢迎打赏哈&#xff01; 2.美化节点之…

vue、jtopo绘制鱼骨图

效果如下图所示&#xff1a; 一、文件目录结构&#xff1a; 二、绘制png的鱼头、鱼尾图片 fish_head.png&#xff1a; fish_tail.png&#xff1a; 三、下载js文件 jquery、jtopo请到官网下载。 四、编写鱼骨图核心文件&#xff1a;MakFishBone.js let MakFishBo…

通过JTopo.js在网页绘制网络拓扑图

项目中遇到要在网页中绘制网络拓扑图的需求&#xff0c;要求节点具备点击、拖拽、缩放等交互功能&#xff0c;并且可以显示/隐藏详细信息&#xff0c;数据是设备实时上报来的。 综上&#xff0c;用画拓扑图的工具画一张固定的图片偷懒显然是不行的&#xff0c;最好是找到一个封…

JTopo添加动态连线

效果如下 先在 JTopo 的 link 原型上定义一个方法 window.requestAnimationFrame window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame JTopo.Link.prototype.drawanimepic functi…

JTopo + Vue 实现自定义拖拽流程图

JTopo Vue 实现自定义拖拽流程图 进入体验效果 进入github 市场上做流程图的插件比较多&#xff0c;这里介绍一种基于canvas编写的js插件&#xff0c;结合vue框架做出精美的流程图 首先搭建vue框架&#xff0c;这里就不做介绍&#xff0c;由于jtopo官方demo里用到了jquery&am…

jtopo连线绘制脉冲动画效果

随着需求的日益精细化&#xff0c;人们越来越多的关注到了画面的美观&#xff0c;单纯的节点间连线已经不满足人们的审美观念了&#xff0c;那么能不能让节点间的连线动起来呢&#xff1f;答案是可以的&#xff0c;老规矩&#xff0c;先上图&#xff0c;再说怎么实现。 同样&am…

jTopo入门 简单实现拓扑图

最近项目中需要绘制拓扑图&#xff0c;于是研究了下绘制拓扑图的组件&#xff0c;jtopo是一款比较简单易上手的开发工具包&#xff0c;分享给大家。 jtopo特点 1、完全基于HTML5 Canvas开发&#xff0c;API平易近人、几乎简单到了极致。 2、不依赖任何其他库、执行仅需一个Ca…

jtopo 实现一键布局

最近很忙、也很懒&#xff0c;一堆烦心事&#xff0c;jtopo后面不准备再深究了&#xff0c;本身东西也不多&#xff0c;做出的新功能&#xff0c;新特效也都写到博客中来了&#xff0c;今天给大家分享最近研究的一个新技能——jtopo一键布局&#xff0c;写给大家、也写给自己。…

jtopo简单实例

原贴地址 http://cn-arthurs.iteye.com/blog/2009345 说明: jtopo是一个基于canvas的js拓扑图形组件.比canvasexpress容易多了. 可以方便地加点,加连线,加鼠标事件,拖曳. 号称跨浏览器,不过实际上不支持ie678,加上excanvas.js也没用,除非像canvasexpress那样使用chrome插件. …