我试图计算两个坐标之间的距离,所以我想使用STDistance。我可以在使用两个变量作为坐标的函数中使用STDistance吗?我正在尝试调用php中的函数,所以这就是为什么我希望它是一个SQL函数。 CREATE FUNCTION measureDistance(@coordsFrom INT, @coordsTo INT)
RETURNS INT
AS
BEGIN
DECLARE @g geography;
DECLARE @h geography;
SET @g = geography::STGeomFromText('LINESTRING(@coordsFrom)
我想知道是否有一种方法可以从空间数据列中查询最近的N个邻居,去掉重复项。
例如,我的查询如下所示:
SELECT TOP (@N) Point.STDistance(@Point) AS Distance
FROM MyTable
WHERE Point.STDistance(@Point) IS NOT NULL --For Spatial Index usage
ORDER BY Distance;
它非常有效,但我的结果是:
Distance
3906,81969203873
3906,81969203873
5321,62614141754
5756,28719382942
我试着放一
query = from i in _db.ILV
join p in _db.PC on
i.PostCode equals p.PostCode
where (!string.IsNullOrEmpty(rng)) ? STGeomFromText(i.Point).STDistance(q.Point) <= rng : true
已声明使用System.Spatial。有人能告诉我做这件事的正确方法吗?
我在SQL Server management studio中有一些表,其中包含几个月来按日期/时间列出的人员的位置。这些表具有以下字段:AnimalID, Date/Time, Lat, Long, Global ID。我正在尝试计算并返回每一对点之间的距离,按照它的移动顺序,而不是手动输入,每个time.There都有许多关于计算两点之间距离的帖子,但我试图运行一个查询,它将以连续的顺序计算每一对点之间的距离。我的一些桌子有数百个位置。
我的价值观可能如下所示:
`MD001 10/9/2019 1:00:00PM 40.73995 -111.8739
M
我在一个表上设置了一个空间索引,该表中有130万条记录,这些记录都经过了地理编码。这些值存储在地理数据类型列中。我遇到的问题是,当我查询这个有空间索引的列时,速度仍然很慢。例如,查找一英里内的所有帐户大约需要20秒。
以下是一个运行速度较慢的查询的示例:
DECLARE @g Geography;
SET @g = (select ci.Geocode from CustomerInformation ci where ci.CIOI = 372658)
DECLARE @region geography = @g.STBuffer(1609.344)
Select top 100 ci
我在使用SQL Server。
我有两张这样的桌子:
Table1:
Column1, Column2, Column3, GeoLoc
-----------------------------------
a b c 0xE61...
Table2
Column1, Column2, Column3, GeoLoc
-----------------------------------
a b c 0xE62...
我希望得到一个输出表,它将比较两个表中的所有点,并告诉我table1在哪里有一个GeoLo
我有一个SQL Server表,其地理点类型为纬度、经度。目前,我只有几分,但是,随着时间的推移,我预计我的桌子会有很大的增长。
稍后,我将需要通过接近另一个点来查询我的表。有什么标准化的方法来有效地做到这一点吗?例如,某种地理空间索引?你的最佳实践是什么?
我需要的查询在伪代码中如下所示:
-- lat0, lng0 and radius0 are search parameters
-- distance() is function which computes distance between two points
SELECT id, lat, lng
FROM myTable
W
我有一个成员表,当结果显示出来时,我想首先显示最近的用户,但是有些用户还没有一个位置集来抛出一个错误。
SELECT ROUND(geography::Point(Lat, Long, 4326).STDistance(geography::Point("&SearchLat&", "&SearchLong&", 4326))/1000,0) as Distance FROM users
如果遇到空字段,我将得到以下错误。
''geography::Point'' failed because pa
我有一个在SSMS中工作很好的查询,但在SSRS中不工作。这是在SSMS中:
declare @or geography = 0xE6100000010CAE8BFC28BCE4474067A89189898A5EC0
declare @dest int =1500
select FirstName+' '+LastName As CustomerName, SpatialLocation as CustomerLocation from Person.Address PA
left join Person.BusinessEntityAddress PBA ON P
在SQL Server2012中提高最接近的空间匹配性能(地理STDistance)时,我发现迭代地增加搜索半径可以提高数据集的性能。
我有以下三个步骤的查询,我试图将其转换为最大深度为3,距离比较级别为*500的递归CTE。
SELECT
N.WorkID,
M.WorkID AS MatchWorkID,
N.Location.STDistance(M.Location) AS Meters
INTO
#MatchWork500
FROM
NewWork N
CROSS APPLY
(SELECT TOP (1)
C
我希望使用空间索引提示查询最近的记录到更多不同的点。如果我在它们之间加上"and“(就像第一个街区),就没有问题了。但是,如果我使用“或”(如第二个块),则会得到错误:
查询处理器无法为具有空间索引提示的查询生成查询计划。原因:找不到所需的比较谓词。尝试删除索引提示或删除设置的FORCEPLAN。
怎么啦?有没有其他的解决办法?
第一区:
SELECT
[Id],[Geocode]
FROM
[dbo].[Companies] with (INDEX(SpatialIndex_GeoCode))
WHERE
([Geocode].STDistance(g
我知道,使用SELECT @source.STDistance(@target),我可以导出两个空间对象之间的距离,更复杂的是,在这种情况下,我可以将最近的邻居封装在一个触发器中,并从最近的邻居那里获取值。恐怕我把这件事搞得太复杂了,以至于我想不出什么简单的东西,不仅是最近邻居的“名字”,而且离它还有多远?如何提取该距离作为其中的一部分,并将该值与名称一起写入?
ALTER TRIGGER [dbo].[IMPORT_RAW_WILD_BEAR_GPS_COLLAR]
ON [dbo].[WILD_BEAR_GPS_COLLAR]
after INSERT,UPDATE NOT FOR REP
我在Server 2008 (而不是R2)中使用STDistance()的空间更新查询存在严重的性能问题。目标很简单:我有一个有12万条记录的表,豪斯和列我有一个包含12条记录的第二个表,Libraries,它的列是名称。这两个表都有地理列LatLngGeography.。我想用Houses.NearestLibrary库中最近的库的名称更新。
此查询大约需要50秒才能运行:
UPDATE Houses
SET NearestLibrary = (
SELECT TOP 1 Name
FROM Libraries
ORDER BY Houses.LatLngGe
在一个新的开发项目中,我面临着一个性能低下的问题,这可能是某人以前所面临的。有许多方法来执行逆向地理编码过程。我有一个存储过程来获得反向地理编码器。
问题是有“道路段(如地理)”的表是一个很大的表,大约有624801行。
对于单个反向地编码器,在台式计算机上需要2秒,但是如果你记住我们现场有1000辆车要求每分钟提供逆向地理编码服务,那就意味着我必须提高服务性能。您能帮助减少查询时间吗?
提前感谢
SELECT TOP 1 WITH TIES *, b.GEOGraphy.STDistance(@input) AS dist
FROM Numbers n
JOIN UK b WITH(IN
我想从两个select语句中获得组合输出。
First select返回某个索引的对象。第二个select返回最近的对象。
declare @h geometry select @h = Geom from obj where ObjectIndex = 15054
select ObjectIndex, Geom.STDistance(@h) from obj where ObjectIndex = 15054
union all
select top( 1) ObjectIndex, Geom.STDistance(@h) from obj WITH(index(idx
我使用的是Microsoft SQL Server 2012,我有一个简单的查询,可以选择按离特定点最近的顺序排序的前50名用户,例如:
DECLARE @Location geography = geography::Point(30.9384016, 29.9582148, 4326)
SELECT TOP 50 *
FROM Users
ORDER BY LastLocation.STDistance(@Location)
查看执行计划,我可以看到它没有使用我的空间索引
该表包含大约40,000条记录,查询的执行时间超过1分钟,我的空间索引是这样创建的:
create
我有一个Location表,它在GeoLocation列上有一个空间索引。以下查询有效:
SELECT *
FROM Location WITH (INDEX (SpatialIndex_GeoLocation))
WHERE GeoLocation.STDistance(GEOGRAPHY::STGeomFromText('POINT(4.271942
52.085289)', 4326)) < 50
但是,在查询中添加第二个谓词时:
SELECT *
FROM Location WITH (INDEX (SpatialIndex_GeoLocatio