热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

地图上2不同区域内的路网存储过程

createprocedurerelation_line@Intersectionsvarchar(500),@StartpointXint,@StartpointYint,@

create procedure relation_line
@Intersections varchar(500),
@StartpointX int,
@StartpointY int,
@EndpointX int,
@EndpointY int,
@Split varchar(1)=';',
@SplitXY varchar(1)=',',
@XYarea int =100,
@area decimal(18,6) =0.00001,
@Usefulline varchar(255) output
as
begin
  declare @Oldintersections varchar(500)
  declare @Length int
  declare @CommaLocation int
  declare @FirstPoint varchar(18)
  declare @Longitude varchar(9)
  declare @latitude varchar(9)
  declare @logicalx varchar(6)
  declare @logicaly varchar(6)
  declare @LengthXY int
  declare @LengthFirstSplit int
  declare @LastLineids varchar(16)
  declare @ThisLineids varchar(16)
  declare @isExistLine varchar(2)
  declare @Index_line int
  declare @Clineid  int
  declare @Cpointid int
    ----对线路中所有路口点处理
    select @OldintersectiOns=@Intersections
    select @CommaLocation=CHARINDEX(@Split, @Oldintersections)
    while(@CommaLocation>0) and (@Oldintersections is not null)
    begin
        set @isExistLine='no'
        select @CommaLocation=CHARINDEX(@Split, @Oldintersections)
        select @Length=DATALENGTH(@Oldintersections)
        select @FirstPoint=SUBSTRING(@Oldintersections,1,@CommaLocation-1)
        print @FirstPoint
        if @FirstPoint is not null
        begin
            select @LengthXY=DATALENGTH(@FirstPoint)
            select @LengthFirstSplit=CHARINDEX(@SplitXY,@FirstPoint)
        end
        if @LengthXY>0
        begin
            select @LOngitude=SUBSTRING(@FirstPoint,1,@LengthFirstSplit-1)
            select @latitude=SUBSTRING(@FirstPoint,@LengthFirstSplit+1,@LengthXY-@LengthFirstSplit)
            if @ThisLineids is not null
            begin
                  select @LastLineids=@ThisLineids
                set @ThisLineids=null
            end
            declare curPointline cursor  for
            select kr.lineid,kr.pointid from kangaroo_roadnet as kr,kangaroo_roadnet_point as krp where kr.pointid=krp.pointid
                and krp.longitude>=cast(@Longitude as decimal(18,6))-@area  and krp.longitude<=cast(@Longitude as decimal(18,6))+@area
                and krp.latitude>=cast(@latitude as decimal(18,6))-@area and krp.latitude<=cast(@latitude as decimal(18,6))+@area
                and krp.pointtype=1
            declare @lineid int
            declare @pointid int
            declare @SubUsefulline varchar(255)
            declare @templp varchar(255)
            declare @lastpointid varchar(5)
            open curPointline
            fetch next from curPointline into @lineid,@pointid
            while ( @@Fetch_Status=0 )
            begin
                if @lineid is not null
                begin
                    select @ThisLineids=@ThisLineids+',l'+@lineid+',p'+@pointid
                end
                else
                begin
                    select @ThisLineids='l'+@lineid+',p'+@pointid
                end
                if @LastLineids is not null
                begin
                    select @Index_line= CHARINDEX('l'+ cast(@lineid as varchar(4)),@LastLineids)
                    if  @Index_line>0
                    begin
                    set @isExistLine='ye'
                    set @templp=substring(@LastLineids,@Index_line+DATALENGTH('l'+cast(@lineid as varchar(4)))+1,DATALENGTH(@LastLineids))
                    set @lastpointid=substring(@templp,2,CHARINDEX(',',@templp)-1)
                          declare getPointXY cursor for
                        select krp.logicalx,krp.logicaly from kangaroo_roadnet as kr,kangaroo_roadnet_point as krp where kr.lineid=@lineid
                             AND (kr.ordernum BETWEEN @lastpointid AND @pointid) ORDER BY kr.ordernum DESC

                        open getPointXY
                        fetch next from getPointXY
                        into @logicalx, @logicaly
                        if @SubUsefulline is not null
                        begin
                            select @SubUsefulline=@SubUsefulline+','+@logicalx+','+@logicaly
                        end
                        else
                        begin
                            select @SubUsefulline=@logicalx+','+@logicaly
                        end
                        close getPointXY
                          deallocate getPointXY   
                    end
                end
            end
            close curPointline
              deallocate curPointline
        end
        if(@isExistLine='ye')
        begin
            set @area=0.00001
            select @OldintersectiOns=SUBSTRING(@Oldintersections, @CommaLocation + 1, @Length - @CommaLocation)
            select @CommaLocation = CHARINDEX(@Split, @Oldintersections)
            if @Usefulline is not null
            begin
                    select @Usefulline=@Usefulline+';'+@SubUsefulline
            end
            else
            begin
                    select @Usefulline=@SubUsefulline
            end
        end
        else
        begin
            set @area=@area+0.00001
        end
    end
    ----对起始终止点处理
    if (@StartpointX is not null) and (@EndpointX is not null) and (@StartpointY is not null) and (@EndpointY is not null)
    begin
       
         if @Usefulline is not null
        declare @Subuserline varchar(255)
        declare @FSubuserline varchar(255)
        declare @FirstX varchar(9)
        declare @FirstY varchar(9)
        declare @LastX varchar(9)
        declare @LastY varchar(9)
        declare @Clogicalx varchar(9)
        declare @Clogicaly varchar(9)
        declare @LinePoints varchar(255)
        declare @int int
        begin
            set @FirstX=left(@Usefulline, charindex(',',@Usefulline)-1)
            set @Subuserline=substring(@Usefulline,charindex(',',@Usefulline)+1,len(@Usefulline))
            --select substring(@Usefulline,charindex(',',@Usefulline)+1,len(@Usefulline))
            set @FirstY=left(@Subuserline, charindex(',',@Subuserline)-1)   
            set @XYarea=100
            set @int=0
            while @int<3
            begin
                set @isExistLine='no'
                declare StartFirstline cursor  for
                SELECT kr1.lineid,krp1.pointid
                FROM kangaroo_roadnet kr1
                INNER JOIN
                      kangaroo_roadnet_point krp1 ON kr1.pointid = krp1.pointid
                where (krp1.logicalx <= @StartpointX+@XYarea and krp1.logicalx >= @StartpointX-@XYarea)

                    AND (krp1.logicaly <= @StartpointY+@XYarea and krp1.logicaly >= @StartpointY-@XYarea)

                    and kr1.lineid in(
                SELECT kr.lineid
                FROM kangaroo_roadnet kr INNER JOIN
                      kangaroo_roadnet_point krp ON kr.pointid = krp.pointid
                WHERE (krp.logicalx = @FirstX) AND (krp.logicaly = @FirstY))
   
                open StartFirstline
                fetch next from StartFirstline into @Clineid,@Cpointid
                while ( @@Fetch_Status=0 )
                begin
                    if @Clineid is not null and @Cpointid is not null
                      begin
                        set @isExistLine='ye'
                        declare StartFirstPoints cursor for
                        select krp1.logicalx,krp1.logicaly from kangaroo_roadnet_point as krp1 where krp1.pointid between @Cpointid and
                        (select krp.pointid from kangaroo_roadnet_point as krp,kangaroo_roadnet as kr
                        where  krp.logicalx=@FirstX and krp.logicaly=@FirstY and krp.pointid=kr.pointid
                        and kr.lineid=@Clineid)
                        open StartFirstPoints
                        fetch next from StartFirstPoints into @Clogicalx,@Clogicaly
                        while ( @@Fetch_Status=0 )
                        begin
                            if @LinePoints is not null
                            begin
                                select @LinePoints=@LinePoints+','+@Clogicalx+','+@Clogicaly
                            end
                            else
                            begin
                                select @LinePoints=@Clogicalx+','+@Clogicaly
                            end
                        end
                        close StartFirstPoints
                          deallocate StartFirstPoints
                    end
                    else
                    begin
                        set @XYarea=@XYarea+100
                    end
                   
                end
                close StartFirstline
                  deallocate StartFirstline
                if(@isExistLine='ye')
                begin
                    if(@Usefulline is not null)
                    begin
                        select @Usefulline=@LinePoints+';'+@Usefulline
                    end
                    else
                    begin
                        select @Usefulline=@LinePoints
                    end
                    break
                end
                else
                begin
                    set @int=@int+1
                end
               
            end
            set @XYarea=100
            set @int=0
            while @int<3
            begin
                set @isExistLine='no'
                set @LastY=right(@Usefulline, charindex(',',reverse(@Usefulline))-1)
                set @FSubuserline=substring(@Usefulline,1,len(@Usefulline)-charindex(',',reverse(@Usefulline)))
                --select substring(@s,1,len(@s)-charindex('-',reverse(@s)))
                set @LastX=right(@FSubuserline, charindex(',',reverse(@FSubuserline))-1)
                declare EndLastline cursor  for
                SELECT kr1.lineid,krp1.pointid
                FROM kangaroo_roadnet kr1
                INNER JOIN
                      kangaroo_roadnet_point krp1 ON kr1.pointid = krp1.pointid
                where (krp1.logicalx <= @StartpointX+@XYarea and krp1.logicalx >= @StartpointX-@XYarea)
                    AND (krp1.logicaly <= @StartpointY+@XYarea and krp1.logicaly >= @StartpointY-@XYarea)
                    and kr1.lineid in(
                SELECT kr.lineid
                FROM kangaroo_roadnet kr INNER JOIN
                      kangaroo_roadnet_point krp ON kr.pointid = krp.pointid
                WHERE (krp.logicalx = @FirstX) AND (krp.logicaly = @FirstY))
   
                open EndLastline
                fetch next from EndLastline into @Clineid,@Cpointid
   
                while ( @@Fetch_Status=0 )
                begin
                    if @Clineid is not null and @Cpointid is not null
                      begin
                        set @isExistLine='ye'
                        declare EndLastPoints cursor for
                        select krp1.logicalx,krp1.logicaly from kangaroo_roadnet_point as krp1 where krp1.pointid between @Cpointid and
                        (select krp.pointid from kangaroo_roadnet_point as krp,kangaroo_roadnet as kr
                        where  krp.logicalx=@FirstX and krp.logicaly=@FirstY and krp.pointid=kr.pointid
                        and kr.lineid=@Clineid)
                        open EndLastPoints
                        fetch next from EndLastPoints into @Clogicalx,@Clogicaly
                        while ( @@Fetch_Status=0 )
                        begin   
                            if @LinePoints is not null
                            begin
                                select @LinePoints=@LinePoints+','+@Clogicalx+','+@Clogicaly
                            end
                            else
                            begin
                                select @LinePoints=@Clogicalx+','+@Clogicaly
                            end
                        end
                        close EndLastPoints
                          deallocate EndLastPoints
                    end
                    else
                    begin
                        set @XYarea=@XYarea+100
                    end
                end
                close EndLastline
                  deallocate EndLastline
                if(@isExistLine='ye')
                begin
                    if(@Usefulline is not null)
                    begin
                        select @Usefulline=@Usefulline+';'+@LinePoints
                    end
                    else
                    begin
                        select @Usefulline=@LinePoints
                    end
                    break
                end
                else
                begin
                    set @int=@int+1
                end
               
            end
           
        end
       
    end
       

end

GO


推荐阅读
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 本文介绍了在 MySQL 中如何使用正则表达式来提高查询效率,通过具体示例展示了如何筛选包含中文字符的记录,并详细解释了正则表达式的各种特殊字符和结构。 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文全面解析了 Python 中字符串处理的常用操作与技巧。首先介绍了如何通过 `s.strip()`, `s.lstrip()` 和 `s.rstrip()` 方法去除字符串中的空格和特殊符号。接着,详细讲解了字符串复制的方法,包括使用 `sStr1 = sStr2` 进行简单的赋值复制。此外,还探讨了字符串连接、分割、替换等高级操作,并提供了丰富的示例代码,帮助读者深入理解和掌握这些实用技巧。 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 数据库多表联合查询:内连接与外连接详解
    在数据库的多表查询中,内连接和外连接是两种常用的技术手段。内连接用于检索多个表中相互匹配的记录,即只有当两个表中的记录满足特定的连接条件时,这些记录才会被包含在查询结果中。相比之下,外连接则不仅返回匹配的记录,还可以选择性地返回不匹配的记录,具体取决于左外连接、右外连接或全外连接的选择。本文将详细解析这两种连接方式的使用场景及其语法结构,帮助读者更好地理解和应用多表查询技术。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 本文详细介绍了在 SQL Server 2005 中优化和实现分页存储过程的方法。通过创建一个名为 `[dbo].[GetUsers]` 的存储过程,该过程接受两个参数:`@RowIndex`(当前指定的页数)和 `@RecordCount`(每页显示的记录数)。文章不仅提供了具体的代码示例,还深入探讨了性能优化技巧,包括索引使用和查询优化策略,以提高分页查询的效率和响应速度。 ... [详细]
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • SQL Server开发技巧:修改表结构后的视图批量更新方法与实践 ... [详细]
  • 在Ubuntu系统中,由于预装了MySQL,因此无需额外安装。通过命令行登录MySQL时,可使用 `mysql -u root -p` 命令,并按提示输入密码。常见问题包括:1. 错误 1045 (28000):访问被拒绝,这通常是由于用户名或密码错误导致。为确保顺利连接,建议检查MySQL服务是否已启动,并确认用户名和密码的正确性。此外,还可以通过配置文件调整权限设置,以增强安全性。 ... [详细]
author-avatar
LBM-痕迹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有