我有一个SQL Server 2008表,其中包含一个geography数据类型的列.该值是一个点(纬度和经度).
如何查询表以返回位置在给定坐标的10公里半径范围内的所有行?
我需要汇总一个关于根据IP地址限制特定国家内容的弱点的小简报.
除了使用位于其他国家/地区的代理服务器之外,您能想到绕过这样一个系统的另一种方法吗?
我正在尝试学习如何使用新的SqlServer 2008管理的空间类型和方法(地理)对记录进行半径搜索以进行地理空间计算.我正在关注此网页上的示例:
http://msdn.microsoft.com/en-us/magazine/dd434647.aspx
我特意尝试这样做:
-- or declare POINT for "downtown Seattle"
-- 1609.344 meters per mile
DECLARE @Seattle geography = 'POLYGON(....)'; SELECT c.customerid FROM
customer c WHERE c.geog.STIntersects(@Seattle.STBuffer(10 * 1609.344));
Run Code Online (Sandbox Code Playgroud)
但是,甚至在运行查询之前(或者当我运行查询时 - 编译和运行时错误)我收到以下错误消息:
An expression of non-boolean type specified in a context where a condition is expected, near ')'
Run Code Online (Sandbox Code Playgroud)
我真的很困惑.我没有做完全相同的查询(我使用自己的数据与地理列)但它几乎与样本相同.我正在运行Sql SErver 2008 SP2标准版64位.当我键入查询时,它使用intellisense作为STIntersection方法并显示(other_geography geography)样本,因此它知道该方法存在.我正在正确地关闭括号并用分号分隔表达式,但我无法弄清楚为什么我得到错误.谷歌搜索没有奏效.
有什么想法吗?
赛斯
我正在用Java写一个地理游戏,我想得到一些关于国家边界位置的数据,但我能找到的只是shapefile,我无法从中获取纬度/经度数据,或者我只能找到每个国家的单一坐标.
我在哪里可以找到
编辑:
它不需要准确; 对于除俄罗斯,中国,美国和巴西之外的任何东西,10个坐标可能就足够了.群岛也不重要.我只想知道能够相对准确地计算出两国之间的最短距离.
我正在使用Sql server 2012和谷歌地图客户端,我使用SRID 3785,因为它是地图使用的mercator.我使用几何点数据类型来存储位置.我读几何比地理更快.但是当我试图计算点之间的距离时,特别是当我使用STDistance时,我会得到一个距离...以十进制度...这很棒..但我真的需要米来向用户显示它们......因此,当您知道自己的SRID时,当您确切知道地球上的哪个位置时,您如何将十进制度数的距离转换为米?我知道地理学处理仪表......但是如何从几何距离计算得到米?我真的很想知道开发人员在地理类型出现之前是怎么做的......谢谢!
我有一张表将地点映射到邮政编码.例如,纽约州有大约2000个邮政编码.我有另一个表将邮件映射到它发送到的邮政编码,但这个表有大约500万行.我想找到发送到纽约州的所有邮件,这看起来很简单,但查询速度令人难以置信.我甚至无法等待足够长的时间才能完成.问题是有500万行吗?我不禁想到,如今计算机上的500万不应该是这么大的数字......哦,一切都被编入索引.SQL只是不是设计用于处理如此大的连接?
更新:正如人们所问,我已经用表定义和我正在使用的查询更新了这个问题.
-- Roughly 70,000 rows
CREATE TABLE `mail_zip` (
`mail_id` int(11) default NULL,
`zip` int(11) default NULL,
KEY `index_mail_zip_on_mail_id` (`mail_id`),
KEY `index_mail_zip_on_zip` (`zip`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
-- Roughly 5,000,000 rows
CREATE TABLE `geographies` (
`city_id` int(11) default NULL,
`postal_code` int(11) default NULL,
KEY `index_geographies_on_city_id` (`city_id`),
KEY `index_geographies_on_postal_code` (`postal_code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
-- Query
select mz.mail_id from mail_zip mz join geographies g on mz.zip = g.postal_code where g.city_id = 36 limit 10;
Run Code Online (Sandbox Code Playgroud)
更新2:好的,我撒了谎.使用正确的索引,上面的查询工作正常.问题实际上是order by子句.请参阅下面两个几乎相同的查询:唯一的区别是"按m.sent_on desc排序",这为查询增加了额外的4分30秒!此外,使用说明,通过使用文件输入添加顺序,这必须是减慢它的速度.但是,sent_on被编入索引,为什么不使用索引呢?我不能正确地制作索引.
-- Roughly 350,000 …
Run Code Online (Sandbox Code Playgroud) 我有这些代表地图上坐标的数据以及每个点的值:
require(tidyverse)
df <- tribble( ~ x, ~ y, ~ N,
776025., 6990858., 100,
744220 , 6940666., 75,
774222., 6904024., 55,
719368., 6973708., 30,
735330., 7029420., 1)
Run Code Online (Sandbox Code Playgroud)
使用该sf
包,我成功地从x
和y
列创建了几何特征:
require(sf)
(geom_column <- st_sfc(pmap(df[, 1:2], function(x, y) st_point(c(x, y)))))
Run Code Online (Sandbox Code Playgroud)
然后将这些几何特征与对象N
中的属性特征组合起来sf
:
(df <- st_sf(df[, 3], geometry = geom_column))
Run Code Online (Sandbox Code Playgroud)
然后我可以绘制这 5 点:
plot(df)
Run Code Online (Sandbox Code Playgroud)
现在我想使用半径与N
属性成比例的圆,而不是默认的色标。但我不知道该怎么做。
我正在使用codecanyon 的交互式地图.我想进行更改,以便当鼠标悬停在选定区域时,所选区域会改变颜色.我部署了一个示例,其中这是执行此操作的代码.
<script type='text/javascript' src='http://www.google.com/jsapi'></script>
<script type='text/javascript'>google.load('visualization', '1', {'packages': ['geochart']});
google.setOnLoadCallback(drawVisualization);
function drawVisualization() {var data = new google.visualization.DataTable();
data.addColumn('string', 'Country');
data.addColumn('number', 'Value');
data.addColumn({type:'string', role:'tooltip'});var ivalue = new Array();
var options = {
backgroundColor: {fill:'#FFFFFF',stroke:'#FFFFFF' ,strokeWidth:25 },
colorAxis: {minValue: 0, maxValue: 0, colors: []},
legend: 'none',
backgroundColor: {fill:'#FFFFFF',stroke:'#FFFFFF' ,strokeWidth:25 },
datalessRegionColor: '#ffc801',
displayMode: 'regions',
enableRegionInteractivity: 'true',
resolution: 'provinces',
sizeAxis: {minValue: 1, maxValue:1,minSize:10, maxSize: 10},
region:'IN',
keepAspectRatio: true,
width:600,
height:400,
tooltip: {textStyle: {color: '#444444'}, trigger:'focus', isHtml: false}
}; …
Run Code Online (Sandbox Code Playgroud) 这比技术上的问题更具逻辑性。因此,请您不要对其进行标记。
我想在python中编写一个方法,该方法需要两个参数->纬度和经度。此方法应返回组/存储桶。分组应基于0.05度进行。
def get_bucket(lat,lng):
#body
Run Code Online (Sandbox Code Playgroud)
例如:
get_bucket(1.05,1.05)-> b1 get_bucket(1.05,1.03)-> b1
因此,就像假设地球被划分为0.05度网格正方形,而落在该正方形中的任何经/纬度共享同一桶。
geography ×9
geospatial ×2
algorithm ×1
geo ×1
geometry ×1
gis ×1
ip-address ×1
java ×1
javascript ×1
join ×1
mysql ×1
python ×1
r ×1
r-sf ×1
security ×1
shapefile ×1
spatial ×1
sql ×1
sql-server ×1
syntax ×1