首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Sql server为STIntersects返回1,它应该返回0?

为什么Sql server为STIntersects返回1,它应该返回0?
EN

Stack Overflow用户
提问于 2022-05-05 23:12:18
回答 1查看 120关注 0票数 0

我有一堆多多边形记录。长话短说,我有一点属于一个多多边形。当你用QGis或类似的软件想象时,这是正确的。但是sql server返回STIntersects =1,这篇文章中不仅针对多多边形,而且对大约65%的多边形返回。在26条记录中,17条表示STIntersects =1,而实际应该是1表示0.

这就是要点:

代码语言:javascript
复制
DECLARE @point geography;
set @point = (select geography::STPointFromText('POINT(7.6027101675492395 46.549656011507068)', 4326)

这是不应该包含透水点的多多边形,但它是:

代码语言:javascript
复制
DECLARE @m geography;

set @m = https://pastebin.pl/view/70e8a7d6 (file is to big)

print @m.STIntersects(@point) --says 1 (it should say 0)

该怎么办呢。我使用GeoJSON.Net.Contrib.MsSqlSpatial将Geo数据转换为sql地理。

我并不熟悉这些东西,我指的是Sql server地理知识或它背后的数学。

我所能做的就是猜测--我最好的猜测--多多边形不知何故搞砸了(我不知道如何证明这一点)或sql server问题或类似的问题。

这是sql服务器ver.:

代码语言:javascript
复制
Microsoft SQL Azure (RTM) - 12.0.2000.8 
    Feb 23 2022 11:32:53 
    Copyright (C) 2021 Microsoft Corporation

有什么想法吗?

从我在微软网站上看到的更新:https://learn.microsoft.com/en-us/sql/relational-databases/spatial/multipolygon?view=sql-server-ver15

多多边形是这样的:

代码语言:javascript
复制
MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3, 1 3, 1 1)))

是否有任何c#库可以将geojson转换为更正多多个区域?

每个多边形周围都有括号,其中我的MULTIPOLYGON是一个多边形。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-06 02:27:55

在使用Server时,需要注意两件事。

地理和几何类型的

  1. 差异。您使用的是地理,它适用于地球球体。顶点之间的边缘是球面测地线。QGIS主要工作在具有平面边缘的平面图上,与Server的几何类型相对应。

当使用地理时,需要注意的是orientation.多边形。

我在上面找不到微软的任何文档,但以下是合理的解释:https://alastaira.wordpress.com/2012/01/27/ring-orientation-bigger-than-a-hemisphere-polygons-and-the-reorientobject-method-in-sql-server-2012/

BigQuery也有类似的方向规则和规则的描述:https://cloud.google.com/bigquery/docs/geospatial-data#polygon_orientation

你可以

differences)

  • reverse

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

https://stackoverflow.com/questions/72134501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档