我正在计划一个应用程序,它需要能够通过lat/lng查找地理点的高程.理想情况下,我想要一些在世界范围内有效的东西,但仅限于美国也足够了.我已经看过使用USGS Elevation Query Web服务,但是它只允许你一次查询一个点,我需要查询几百个,可能多达几千个.我也考虑过自己下载和托管国家海拔数据集,但这几乎是100演出,显然USGS只允许你一次下载1.5演出.
任何熟悉GIS的人都能为我推荐一个好的解决方案吗?我正在寻找尽可能轻巧简单的东西.我对GIS是全新的,所以我非常感谢有关获取数据的位置,如何存储以及使用它时如何/使用的建议.
提前致谢.
编辑:只是为了澄清,我需要的数据点不是预先确定的.它们是用户选择的任意点(通过与谷歌地图混搭进行交互),因此我需要能够查询任何点,而不仅仅是一小部分.
编辑2:如果没有轻量级或简单的解决方案,我将采取我能得到的任何东西=)
我正在创建一个Google地图mashup并使用SQL 2008.
我将在地球上拥有大量的点,并希望在SQL中对它们执行各种计算 - 例如选择特定多边形中包含的所有点,或选择距离XY 10km内的所有点.
我之前从未使用过SQL空间功能.我应该使用geography或geometry数据类型吗?
我正在尝试为我正在处理的数据集选择一个不错的SQL Server 2008空间索引设置.
数据集是多边形,表示整个地球的轮廓.表中有106,000行,多边形存储在几何字段中.
我的问题是许多多边形覆盖了地球的很大一部分.这似乎很难获得一个空间索引,它将消除主过滤器中的许多行.例如,查看以下查询:
SELECT "ID","CODE","geom".STAsBinary() as "geom" FROM "dbo"."ContA"
WHERE "geom".Filter(
geometry::STGeomFromText('POLYGON ((-142.03193662573682 59.53396984952896,
-142.03193662573682 59.88928136451884,
-141.32743833481925 59.88928136451884,
-141.32743833481925 59.53396984952896,
-142.03193662573682 59.53396984952896))', 4326)
) = 1
Run Code Online (Sandbox Code Playgroud)
这是查询与表中只有两个多边形相交的区域.无论我选择何种空间索引设置组合,Filter()总是返回大约60,000行.
用STIntersects()替换Filter()当然只返回我想要的两个多边形,但当然需要更长的时间(Filter()为6秒,STIntersects()为12秒).
任何人都可以给我任何关于是否存在可能在60,000行上改进的空间索引设置或者我的数据集是否与SQL Server的空间索引不匹配的提示?
更多信息:
正如所建议的那样,我在地球上使用4x4网格分割多边形.我无法用QGIS看到这样的方法,所以我编写了自己的查询来做到这一点.首先我定义了16个边界框,第一个看起来像这样:
declare @box1 geometry = geometry::STGeomFromText('POLYGON ((
-180 90,
-90 90,
-90 45,
-180 45,
-180 90))', 4326)
Run Code Online (Sandbox Code Playgroud)
然后我使用每个边界框来选择和截断与该框相交的多边形:
insert ContASplit
select CODE, geom.STIntersection(@box1), CODE_DESC from ContA
where geom.STIntersects(@box1) = 1
Run Code Online (Sandbox Code Playgroud)
我显然为4x4网格中的所有16个边界框做了这个.最终结果是我有一个新表~107,000行(这证实我实际上没有很多巨大的多边形).
我添加了一个空间索引,每个对象有1024个单元格,每个级别的单元格低,低,低,低.
然而,非常奇怪的是,这个具有分割多边形的新表仍然与旧表一样.执行上面列出的.Filter 仍然会返回~60,000行.我根本不理解这一点,显然我不明白空间索引实际上是如何工作的.
矛盾的是,虽然.Filter()仍然返回~60,000行,但它的性能有所提高..Filter()现在大约需要2秒而不是6秒,而.STIntersects()现在需要6秒而不是12秒.
这里要求的是索引的SQL示例:
CREATE SPATIAL INDEX [contasplit_sidx] ON [dbo].[ContASplit]
(
[geom]
)USING …Run Code Online (Sandbox Code Playgroud) spatial geospatial spatial-query sql-server-2008 spatial-index
如何从python获取已安装的GDAL/OGR版本?
我知道该gdal-config程序,目前正在使用以下内容:
In [3]: import commands
In [4]: commands.getoutput('gdal-config --version')
Out[4]: '1.7.2'
Run Code Online (Sandbox Code Playgroud)
但是,我怀疑有一种方法可以使用python API本身.任何骰子?
我跟随Daniel Azuma关于使用rails进行地理空间分析的讨论,但每当我rake db:migrate在第二个项目中运行时,我都遇到了困难.
我的设置细节如下:我使用Postgres.app运行Postgresql,它给出了Postgres版本9.1.3和PostGIS 2.0.0版本.我遇到了database.yml文件的一些问题,并运行了迁移.(我添加了相关的宝石,并在application.rb中要求他们的信息)
我的database.yml文件如下所示:
development:
adapter: postgis
postgis_extension: true
host: localhost
encoding: unicode
database: my_app_development
pool: 5
username: my_app
password:
Run Code Online (Sandbox Code Playgroud)
如果我添加以下行,schema_search_path: "public,postgis"我得到:
rake aborted!
PG::Error: ERROR: schema "postgis" does not exist
: SET search_path TO public,postgis
Run Code Online (Sandbox Code Playgroud)
如果我删除该行,当我尝试迁移数据库时收到以下错误:
rake aborted!
PG::Error: ERROR: relation "geometry_columns" does not exist
LINE 1: SELECT * FROM geometry_columns WHERE f_table_name='schema_mi... ^
: SELECT * FROM geometry_columns WHERE f_table_name='schema_migrations'
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何解决这些问题?
看起来mongodb为地理空间查询提供了两个类似的功能 - $near和$geoNear.根据mongo文档
geoNear命令提供$ near运算符的替代方法.除了$ near的功能外,geoNear还会返回其他诊断信息.
它看起来像geoNear提供了near功能的超集.例如,near似乎只返回最近的100个文档,而geoNear允许您指定最大值.是否有理由使用near而不是geoNear?一个比另一个更有效吗?
我需要使用Bing Map服务,EF 5和SQL Server 2008对大量地址进行地理编码.我在SQL中使用地理数据类型,它转换为EF的DbGeography类型.
当我创建一个DbGeography对象时,就像这样
string point = string.Format("POINT({0} {1})",address.Longitude,address.Latitude);
address.Location = System.Data.Spatial.DbGeography.PointFromText(point, 4326);
Run Code Online (Sandbox Code Playgroud)
第二个参数调用"coordinateSystemId".究竟是什么?很多我看到用4326我是新来的空间数据,但我猜有一组明确的坐标系的例子吗?我似乎无法找到一个定义.
我正在研究一个需要进行地理空间过滤的搜索查询(即过滤掉一定半径以外的所有元素).我们将PostgreSQL和ElasticSearch作为我们基础架构的一部分,我正在评估两者中的哪一个使用.
我不是要求"哪个更好",但在易于实现,性能,可扩展性等方面,客观的优缺点列表会有所帮助.
所以这是我的设置:
我有一张桌子如:
Id, Lat, Long, GeoPoint, GeomPoint
两个GeoPoint(地理)和GeomPoint(几何)设置为SRID 4326
我有以下查询:
DECLARE @radiiCollection TABLE
( [ID] INT IDENTITY(1, 1) PRIMARY KEY,
[Radius] GEOMETRY,
[RefPoint] GEOMETRY,
[RefAddr] VARCHAR(255),
[MinLat] VARCHAR(255),
[MaxLat] VARCHAR(255),
[MinLng] VARCHAR(255),
[MaxLng] VARCHAR(255))
DECLARE @point GEOMETRY = geometry::Point(-111.84493459999999, 33.3902569, 4326)
DECLARE @gpoint GEOGRAPHY = geography::Point(33.3902569, -111.84493459999999, 4326);
INSERT INTO @radiicollection
(radius,
refpoint,
refaddr,
maxlat,
maxlng,
minlat,
minlng)
VALUES ( @point.MakeValid().STBuffer(16093.40),
@point,
'10 miles of 85210',
33.51734689767781,
-111.6923852740045,
33.26298081643247,
-111.99703818130439 )
SELECT
GeomPoint,
GeoPoint
INTO #temp …Run Code Online (Sandbox Code Playgroud) 我在MVC 5应用程序上使用Code First方法使用Entity Framework 6.x. 在这种特殊情况下,我的模型(以及其他内容)包含两个名为Latitude和Longitude的属性:
[Required, Range(-90, +90)]
public decimal Latitude { get; set; }
[Required, Range(-180, +180)]
public decimal Longitude { get; set; }
Run Code Online (Sandbox Code Playgroud)
当我执行迁移时,我得到了类似的东西
CreateTable("ResProperty"), c => new {
:
Latitude = c.Decimal(nullable: false, precision: 10, scale: 8),
Longitude = c.Decimal(nullable: false, precision: 11, scale: 8),
:
})
... other stuff
Run Code Online (Sandbox Code Playgroud)
所以纬度和经度都有8 位十进制数字.前者有2个整数(最多90个),后者有3个整数(最多180个).
执行Update-Database命令后,我的表的列显示为:
Latitude decimal(10,8)
Longitude decimal(11,8)
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很好.现在在我看来,我有一个地图和Javascript代码,允许用户重新定位标记.这也很好.重新定位标记时,纬度和经度字段将填充更新的值,其中(Javascript)具有超过12个十进制数字.这与AFAIK无关,因为我的比例是8位小数.
按下提交按钮并调用Create或Edit POST方法后,我检查模型实例,并确认模型中传递给控制器的实际值是正确的,它们有足够的十进制数字(那些Javascript代码)地点).所以价值是正确的.
现在......问题在于执行db.SaveChanges()之后数据库得到更新 - 我已经确认已经发生了实际的写入/更新 - 但不知何故内部EF忽略了我的实际值并写入了截断的纬度/经度四舍五入到只有两位小数,所以我的纬度在数据库中显示为09.500000000所有其他十进制数字都归零,因为似乎已经进行了舍入.
// Prior to SaveChanges()
Latitude = 9.08521879
Longitude = -79.51658792 …Run Code Online (Sandbox Code Playgroud) rounding-error decimal geospatial ef-code-first entity-framework-6
geospatial ×10
gis ×2
postgis ×2
postgresql ×2
.net ×1
decimal ×1
gdal ×1
geography ×1
geolocation ×1
geometry ×1
google-maps ×1
mongodb ×1
ogr ×1
python ×1
ruby ×1
spatial ×1
sql ×1
sql-server ×1