post-gis

来源:互联网 发布:房产测绘软件下载 编辑:程序博客网 时间:2024/05/17 08:46

 

  TopoGeo_addLinestring ============begin=============

                  SELECT topology.ST_AddIsoNode(atopology, NULL, firstpoint) INTO firstnode;
                  SELECT topology.ST_AddIsoNode(atopology, NULL, lastpoint) INTO lastnode;

                  SELECT topology.ST_AddIsoEdge(atopology, firstnode, lastnode, aline)

TopoGeo_addLinestring =============end================
 

 

 

ST_AddIsoNode(atopology, aface, apoint)=============begin=================

 

ST_AddIsoNode(atopology, aface, apoint)=============end==================

 

 

//======================================================================

struct lwgeom_backend_definition lwgeom_backends[LWGEOM_NUM_BACKENDS] = {
    { .name = "geos",
      .intersects_fn    = geos_intersects,
      .intersects3d_fn  = intersects3d_dwithin,
      .intersection_fn  = geos_intersection,
      .area_fn          = LWGEOM_area_polygon,
      .distance_fn      = LWGEOM_mindistance2d,
      .distance3d_fn    = LWGEOM_mindistance3d
    },
#if HAVE_SFCGAL
    { .name = "sfcgal",
      .intersects_fn    = sfcgal_intersects,
      .intersects3d_fn  = sfcgal_intersects3D,
      .intersection_fn  = sfcgal_intersection,
      .area_fn          = sfcgal_area,
      .distance_fn      = sfcgal_distance,
      .distance3d_fn    = sfcgal_distance3D
    }
#endif
};


 struct lwgeom_backend_definition* lwgeom_backend = &lwgeom_backends[0];


PG_FUNCTION_INFO_V1(intersects);
Datum intersects(PG_FUNCTION_ARGS)
{
    return (*lwgeom_backend->intersects_fn)( fcinfo );
}

//==============================================================================

 

//===========================================================

GEOSTopologyPreserveSimplify();

GEOSTopologyPreserveSimplify_r();

//===========================================================

 

 

 

'WITH areas AS ( SELECT ST_Union(topology.ST_GetFaceGeometry(quote_literal(toponame) || . 'element_id)) as g FROM '
      || quote_ident(toponame)
      || '.relation WHERE topogeo_id = '
      || topogeom.id || ' AND layer_id = '
      || topogeom.layer_id || ' AND element_type = 3), '
      || 'lines AS ( SELECT ST_LineMerge(ST_Collect(e.geom)) as g FROM '
      || quote_ident(toponame) || '.edge e, '
      || quote_ident(toponame) || '.relation r '
      || ' WHERE r.topogeo_id = ' || topogeom.id
      || ' AND r.layer_id = ' || topogeom.layer_id
      || ' AND r.element_type = 2 '
      || ' AND abs(r.element_id) = e.edge_id ), '
      || ' points as ( SELECT st_union(n.geom) as g FROM '
      || quote_ident(toponame) || '.node n, '
      || quote_ident(toponame) || '.relation r '
      || ' WHERE r.topogeo_id = ' || topogeom.id
      || ' AND r.layer_id = ' || topogeom.layer_id
      || ' AND r.element_type = 1 '
      || ' AND r.element_id = n.node_id ), '
      || ' un as ( SELECT g FROM areas UNION ALL SELECT g FROM lines '
      || '          UNION ALL SELECT g FROM points ) '
      || 'SELECT ST_Multi(ST_Collect(g)) FROM un';
    EXECUTE sql INTO geom;

 

0 0
原创粉丝点击