使用PostGis存储路线数据,在GeoServer中发布路网图层和最短路径图层,通过OpenLayers建立路网和展示图层。
1、PostGis:PostgreSQL 12.4,
2、GeoServer:geoserver-2.17.2
3、OpenLayers:6.4.3
一、做成路网数据
1、在PostGis建立路网数据表,主键使用sequence,路网geom 使用geometry(LineString,4326)
CREATE SEQUENCE public.my_roads_id_seq
INCREMENT 1
START 1
MINVALUE 1
MAXVALUE 2147483647
CACHE 1;
ALTER SEQUENCE public.my_roads_id_seq OWNER TO postgres;
CREATE TABLE public.my_roads
(
id integer NOT NULL DEFAULT nextval('my_roads_id_seq'::regclass),
name character varying(32) COLLATE pg_catalog."default",
geom geometry(LineString,4326),
CONSTRAINT my_roads_pkey PRIMARY KEY (id)
)TABLESPACE pg_default;
ALTER TABLE public.my_roads OWNER to postgres;
2、在GeoServer中发布路网图层
建立工作区,建立postgis的数据存储,发布my_roads图层。

EPSG使用4326,边框及经纬度为:【-180,-90 】【180,90】即可。

3、OpenLayers中建立路网
使用vue开发路网编辑画面。

实现方式,请参考:OpenLayers 在Vue中增删改
注意点:新增的线不再是newFeature.setGeometry(new MultiLineString([geometry.getCoordinates()]))
// 转换坐标
let geometry = this.drewFeature.getGeometry().clone();
geometry.applyTransform(function (flatCoordinates, flatCoordinates2, stride) {
for (let j = 0; j < flatCoordinates.length; j += stride) {
let y = flatCoordinates[j];
let x = flatCoordinates[j + 1];
flatCoordinates[j] = x;
flatCoordinates[j + 1] = y;
}
});
// 设置feature对应的属性,这些属性是根据数据源的字段来设置的
let newFeature = new Feature();
newFeature.setId('nyc_roads.new.' + this.newId);
newFeature.setGeometryName('the_geom');
newFeature.set('the_geom', null);
newFeature.set('name', newFeature.getId());
newFeature.setGeometry(new MultiLineString([geometry.getCoordinates()]));
而是newFeature.setGeometry(geometry);
// 转换坐标
let geometry = this.drewFeature.

最低0.47元/天 解锁文章
3798





