首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >存储与计划路线相关的地理坐标的最佳方法是什么?

存储与计划路线相关的地理坐标的最佳方法是什么?
EN

Database Administration用户
提问于 2013-09-10 04:13:09
回答 2查看 10.4K关注 0票数 3

下面是我的场景:

应用程序"A“产生与计划路线相对应的lat和长点。视路线距离而定,它可能有几千个点。我知道地理和几何数据类型,即使他们推出了SQL 2008,我还没有见过有人使用它们,也不确定使用它的好场景是什么。除了应用程序"A“生成的点外,我还需要存储与实际路由对应的App "B”中的点。在全部存储完毕后,我需要找到偏离计划路线的地方。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2013-09-11 08:53:43

这可能是NP-完全问题,http://en.wikipedia.org/wiki/NP-complete将它与旅行推销员问题进行比较,http://en.wikipedia.org/wiki/Travelling_推销员_问题,我不确定它是否NP-完整,因为我的大学课本在存储,而且我的复杂性课程已经有一段时间了。

这并不是说我们不能仅仅使用Server空间数据类型来做一些简单的“漂移数学”,从@kenwilsondba建议的表方法开始。

一种更彻底的方法(如果不是NP-完全的话)将寻找实际路线返回到其他事情上的位置。

但是,如果我们所需要的只是简单的漂移计算,如果我们只需要简单地计算漂移,那么我们就可以使用SQL Server空间数据类型进行以下操作:如果实际路由经过,我们就可以丢弃额外的目的地;或者,如果实际路由处于运行状态,则重复最后一个实际端点,忽略路由返回的任何段,并假定停止if实际上是顺序的。

请注意,这种计算方法还惩罚了实际的路线,这些路线在开始时只偏离,在剩下的路线上从不偏离,并且奖励那些在最后点之前保持在轨道上的人。

另一个警告是,下面表设计中的字段是多余的。

默认情况下,距离计算以米为单位。

代码语言:javascript
运行
AI代码解释
复制
CREATE TABLE a_planned_point (
    route_id            INT, 
    stop_id             INT,
    lat                 DECIMAL(10,7), 
    long                DECIMAL(10,7), 
    pointspatialdata    GEOGRAPHY,    
    city                VARCHAR(20),
    state               CHAR(2) )

CREATE TABLE b_actual_point (
    route_id            INT, 
    stop_id             INT,
    lat                 DECIMAL(10,7), 
    long                DECIMAL(10,7), 
    pointspatialdata    GEOGRAPHY,    
    city                VARCHAR(20),
    state               CHAR(2) )

CREATE TABLE c_planned_segment (
    route_id            INT, 
    start_id            INT,
    stop_id             INT,
    lat_planned_stop    DECIMAL(10,7), 
    long_planned_stop   DECIMAL(10,7), 
    city_planned        VARCHAR(20),
    state_planned       CHAR(2), 
    segmentspatialdata  GEOGRAPHY)

CREATE TABLE d_actual_segment (
    route_id            INT, 
    start_id            INT,
    stop_id             INT,
    lat_actual_stop     DECIMAL(10,7), 
    long_actual_stop    DECIMAL(10,7), 
    city_actual         VARCHAR(20),
    state_actual        CHAR(2), 
    segmentspatialdata  GEOGRAPHY)

CREATE TABLE e_drift_segment (
    route_id            INT, 
    planned_stop_id     INT,
    actual_stop_id      INT,
    lat_planned_stop    DECIMAL(10,7), 
    long_planned_stop   DECIMAL(10,7), 
    city_planned        VARCHAR(20),
    state_planned       CHAR(2), 
    lat_actual_stop     DECIMAL(10,7), 
    long_actual_stop    DECIMAL(10,7), 
    city_actual         VARCHAR(20),
    state_actual        CHAR(2), 
    distance_drift      FLOAT,
    segmentspatialdata  GEOGRAPHY)

INSERT INTO a_planned_point (route_id, stop_id, lat, long, pointspatialdata, city, state) VALUES
    (1, 0, 33.93, -118.40, CAST('POINT(-118.40 33.93)' AS GEOGRAPHY), 'Los Angeles', 'CA'), 
    (1, 1, 33.43, -112.02, CAST('POINT(-112.02 33.43)' AS GEOGRAPHY), 'Phoenix', 'AZ'),
    (1, 2, 39.75, -104.87, CAST('POINT(-104.87 39.75)' AS GEOGRAPHY), 'Denver', 'CO'), 
    (1, 3, 25.82, -80.28,  CAST('POINT(-80.28 25.82)' AS GEOGRAPHY),  'Miami Intl', 'FL'), 
    (1, 4, 40.77, -73.98,  CAST('POINT(-73.98 40.77)' AS GEOGRAPHY),  'New York', 'NY'), 
    (1, 5, 42.37, -71.03,  CAST('POINT(-71.03 42.37)' AS GEOGRAPHY),  'Boston', 'MA')

INSERT INTO b_actual_point (route_id, stop_id, lat, long, pointspatialdata, city, state) VALUES
    (1, 0, 33.93, -118.40, CAST('POINT(-118.40 33.93)' AS GEOGRAPHY), 'Los Angeles', 'CA'), 
    (1, 1, 39.75, -104.87, CAST('POINT(-104.87 39.75)' AS GEOGRAPHY), 'Denver', 'CO'), 
    (1, 2, 33.43, -112.02, CAST('POINT(-112.02 33.43)' AS GEOGRAPHY), 'Phoenix', 'AZ'),
    (1, 3, 25.82, -80.28,  CAST('POINT(-80.28 25.82)' AS GEOGRAPHY),  'Miami Intl', 'FL'), 
    (1, 4, 40.77, -73.98,  CAST('POINT(-73.98 40.77)' AS GEOGRAPHY),  'New York', 'NY')



INSERT INTO c_planned_segment (
    route_id,
    start_id, 
    stop_id,
    lat_planned_stop,
    long_planned_stop,
    city_planned,  
    state_planned,
    segmentspatialdata
    )
    SELECT 
        x.route_id, 
        x.stop_id, 
        y.stop_id, 
        y.lat, 
        y.long, 
        y.city, 
        y.state, 
        CAST('LINESTRING(' + CAST(x.long AS VARCHAR) +' '+ CAST(x.lat AS VARCHAR) +', '+ 
            CAST(y.long AS VARCHAR) +' '+ CAST(y.lat AS VARCHAR) + ')' AS GEOGRAPHY) AS segmentspatialdata
    FROM 
        a_planned_point x
    LEFT OUTER JOIN 
        a_planned_point y
    ON     
        y.stop_id = x.stop_id + 1 
    WHERE 
        y.stop_id IS NOT NULL   
        and 
        x.route_id = 1
    ORDER BY x.stop_id

INSERT INTO d_actual_segment (
    route_id, 
    start_id, 
    stop_id, 
    lat_actual_stop,
    long_actual_stop,  
    city_actual, 
    state_actual,
    segmentspatialdata 
    )
    SELECT 
        x.route_id, 
        x.stop_id, 
        y.stop_id, 
        y.lat, 
        y.long, 
        y.city, 
        y.state, 
        CAST('LINESTRING(' + CAST(x.long AS VARCHAR) +' '+ CAST(x.lat AS VARCHAR) +', '+ 
            CAST(y.long AS VARCHAR) +' '+ CAST(y.lat AS VARCHAR) + ')' AS GEOGRAPHY) AS segmentspatialdata
    FROM 
        b_actual_point x
    LEFT OUTER JOIN 
        b_actual_point y
    ON     
        y.stop_id = x.stop_id + 1 
    WHERE 
        y.stop_id IS NOT NULL   
        and 
        x.route_id = 1
    ORDER BY x.stop_id



INSERT INTO e_drift_segment (
    route_id, 
    planned_stop_id, 
    actual_stop_id, 
    lat_planned_stop, 
    long_planned_stop, 
    city_planned, 
    state_planned,
    lat_actual_stop,
    long_actual_stop,
    city_actual,
    state_actual,
    distance_drift,
    segmentspatialdata 
    )
    SELECT 
        x.route_id, 
        x.stop_id, 
        y.stop_id, 
        x.lat,
        x.long, 
        x.city, 
        x.state,
        y.lat, 
        y.long, 
        y.city, 
        y.state,
        x.pointspatialdata.STDistance(y.pointspatialdata), 
        CAST('LINESTRING(' + CAST(x.long AS VARCHAR) +' '+ CAST(x.lat AS VARCHAR) +', '+ 
            CAST(y.long + 0.0000001 AS VARCHAR) +' '+ CAST(y.lat AS VARCHAR) + ')' AS GEOGRAPHY) AS segmentspatialdata
    FROM 
        a_planned_point x
    LEFT OUTER JOIN 
        b_actual_point y
    ON     
        y.stop_id = x.stop_id 
    WHERE 
        x.stop_id IS NOT NULL   
        and 
        y.stop_id IS NOT NULL   
        and
        x.route_id = 1
    ORDER BY x.stop_id

要找出米的总漂移量:

代码语言:javascript
运行
AI代码解释
复制
select sum(distance_drift) from e_drift_segment where route_id = 1

要同时在Server "Spatial结果“选项卡中显示计划的、实际的和漂移的路由段,请执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
select segmentspatialdata from c_planned_segment where route_id = 1
union all
select segmentspatialdata from d_actual_segment where route_id = 1
union all
select segmentspatialdata from e_drift_segment where route_id = 1
票数 4
EN

Database Administration用户

发布于 2013-09-10 06:12:42

建议使用两个表。表A为计划路线,表B为实际路线。一旦填充了这两个表,就可以在某种标识符上加入这两个表,并使用STDistance方法来确定偏差。在这种情况下,我认为还有许多其他方法是有用的。

请参阅http://technet.microsoft.com/en-us/library/cc280766.aspx

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/49594

复制
相关文章
dotnet OpenXML SDK 形状的翻转与旋转
在 OpenXML 的 PPT 元素,形状的翻转与旋转是有逻辑关系,本文来和大家聊聊形状的翻转和形状的旋转的关系
林德熙
2020/09/25
9570
dotnet OpenXML SDK 形状的翻转与旋转
【说站】ps怎么旋转某个形状
(3)调整好之后按回车确定,然后就可以尽情的按住Ctrl+Alt+Shift+T,复制前面的步骤了。
很酷的站长
2022/11/24
1.4K0
【说站】ps怎么旋转某个形状
识别图中的图形形状,颜色,位置,面积,周长。
1、点击[Matlab] 2、点击[命令行窗口] 3、按<Enter>键
裴来凡
2022/05/28
1.2K0
识别图中的图形形状,颜色,位置,面积,周长。
javascript中各种计算位置高度的方法
网页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offsetWidth (包括边线的宽); 网页可见区域高: document.body.offsetHeight (包括边线的高宽); 网页正文全文宽: document.body.scrollWidth; 网页正文全文高: document.body.scrollHeight; 网页被卷去的高: document.body.scrollTop; 网页被卷去的左: document.body.scrollLeft; 网页正文部分上: window.screenTop; 网页正文部分左: window.screenLeft; 屏幕分辨率的高: window.screen.height; 屏幕分辨率的宽: window.screen.width; 屏幕可用工作区高度: window.screen.availHeight; 屏幕可用工作区宽度:window.screen.availWidth; scrollHeight: 获取对象的滚动高度。 scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离 scrollWidth:获取对象的滚动宽度 offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度 offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置 offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置 event.clientX 相对文档的水平座标 event.clientY 相对文档的垂直座标 event.offsetX 相对容器的水平坐标 event.offsetY 相对容器的垂直坐标 document.documentElement.scrollTop 垂直方向滚动的值 event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量
用户5640963
2019/07/26
1.6K0
AS3中的位操作
在AS3中位操作是非常快的,这里列出一些可以加快某些计算速度的代码片段集合。我不会解释什么是位运算符,也不会解释怎么使用他们,只能告诉大家如果想清楚其中的原理先认真学一下2进制.
py3study
2020/01/06
4180
博采众长式的旋转位置编码
上一篇文章中,我们对原始的Sinusoidal位置编码做了较为详细的推导和理解,总的感觉是Sinusoidal位置编码是一种"想要成为相对位置编码的绝对位置编码"。
mathor
2021/05/20
1.7K0
代码在内存中的'形状'
代码在内存中的'形状' http://zoo.zhengcaiyun.cn/blog/article/code-shape
政采云前端团队
2023/02/27
4860
代码在内存中的'形状'
AS3中的单件(Singleton)模式
单件(singleton)模式在c#中是最容易实现的模式,其主要用意就在于限制使用者用new来创建多个实例。但在as3中,构造函数必须是public的(语法本身要求的),而且也不能在构造函数中抛出异常(编译可通过,但是逻辑行不通),因为这样相当于把创建实例的路子完全切断了,一个实例也得不到! 错误代码: package{ public class singleton{ static private var _instance:singleton; public function sin
菩提树下的杨过
2018/01/23
7900
一文彻底搞懂js中的位置计算
Element.scroll()方法是用于在给定的元素中滚动到某个特定坐标的Element 接口。
19组清风
2021/11/15
3.9K0
一文彻底搞懂js中的位置计算
如何复用原有设计中Block的位置
这里的Block是指Block RAM和DSP48。在有些设计中,这两者有其一或者两者均出现利用率比较高的情形,而且在某一版本中可以达到时序收敛。如果后续版本并不涉及到对Block的修改,特别是不会出现对Block RAM位宽的修改,为了达到时序收敛,一个可行的方案就是继承收敛版本的Block的布局。本质上,就是复用这些Block的位置信息。在Vivado下完成这样的操作非常简单。
Lauren的FPGA
2019/10/30
8160
一文看懂 LLaMA 中的旋转式位置编码(Rotary Position Embedding)
旋转式位置编码(RoPE)最早是论文[1]提出的一种能够将相对位置信息依赖集成到 self-attention 中并提升 transformer 架构性能的位置编码方式。而目前很火的 LLaMA 模型也是采用该位置编码方式。
BBuf
2023/08/22
5.1K0
一文看懂 LLaMA 中的旋转式位置编码(Rotary Position Embedding)
AS3中mouseEnabled和mou
mouseEnabled mouseEnabled 属性 mouseEnabled:Boolean 语言版本: ActionScript 3.0 运行时版本: AIR 1.0, Flash Player 9, Flash Lite 4 指定此对象是否接收鼠标或其他用户输入、消息。默认值为 true,这表示默认情况下,显示列表上的任何 InteractiveObject 实例都会接收鼠标事件或其他用户输入事件。如果将 mouseEnabled 设置为 false,则实例将不接收任何鼠标事件(或其他用户输入
py3study
2020/01/07
7010
as3中ProgressEvent的bytesTotal始终为0
遇到很奇怪的问题,as3中监听资源下载的PROGRESS事件(ProgressEvent.PROGRESS),它的bytesLoaded属性倒是正常的,但bytesTotal属性却始终为0,结果是导致了得到的下载比率为无穷大(Infinity)
meteoric
2018/11/15
9040
关于AS3中Vector的sort排序
调用 $back.sort(sortRank);  注 : $back 是 vector.<RankPlayerModel>类型的
py3study
2020/01/08
4150
【转】一文看懂 LLaMA 中的旋转式位置编码(Rotary Position Embedding)
原文:https://mp.weixin.qq.com/s/0peSNWN0ypMopPR0Q_pujQ
marsggbo
2023/07/20
4800
【转】一文看懂 LLaMA 中的旋转式位置编码(Rotary Position Embedding)
如何根据经纬度计算地面上某点在XYZ空间直角坐标系中的坐标
zhaokang555
2023/10/17
3720
如何根据经纬度计算地面上某点在XYZ空间直角坐标系中的坐标
as3中颜色矩阵滤镜ColorMatrixFilter的使用
上面的例子,也是游戏开发中比较常用的功能,与“怪物”战斗后,将其“灰”掉。这其中最重要的还是对AS3颜色矩阵滤镜(ColorMatrixFilter)的使用。
meteoric
2018/11/16
1.4K0
如何去除叠加图层后的多余形状
当我们往地图上叠加图层后,未能完全覆盖那块地图,原先地图的上的一些形状被放大之后仍能看见,那么如何去除叠加图层后仍然显示的多余形状呢?
算法与编程之美
2021/12/28
9160
如何去除叠加图层后的多余形状
AS3的splice
当第一个元素为-1时,竟然删除了集合的最后的元素,实在是...倒数删除,倒数第一个元素的Index = -1 , 倒数第二个为 -2 , 依次类推,并非不删除元素.
py3study
2020/01/10
6440
点击加载更多

相似问题

从纬度/经度坐标的所有可能点(纬度、经度)在单独的数组中

21

在纬度/经度点之间计算更多的纬度和经度?

31

使用我的位置纬度经度和DB纬度经度计算距离

10

用R计算纬度和经度坐标的距离

21

计算经度/纬度

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文