标签: geospatial

如何通过lat/lng查找高程数据

我正在计划一个应用程序,它需要能够通过lat/lng查找地理点的高程.理想情况下,我想要一些在世界范围内有效的东西,但仅限于美国也足够了.我已经看过使用USGS Elevation Query Web服务,但是它只允许你一次查询一个点,我需要查询几百个,可能多达几千个.我也考虑过自己下载和托管国家海拔数据集,但这几乎是100演出,显然USGS只允许你一次下载1.5演出.

任何熟悉GIS的人都能为我推荐一个好的解决方案吗?我正在寻找尽可能轻巧简单的东西.我对GIS是全新的,所以我非常感谢有关获取数据的位置,如何存储以及使用它时如何/使用的建议.

提前致谢.

编辑:只是为了澄清,我需要的数据点不是预先确定的.它们是用户选择的任意点(通过与谷歌地图混搭进行交互),因此我需要能够查询任何点,而不仅仅是一小部分.

编辑2:如果没有轻量级或简单的解决方案,我将采取我能得到的任何东西=)

ruby gis google-maps geospatial

12
推荐指数
2
解决办法
1万
查看次数

SQL 2008地理和几何 - 使用哪些?

我正在创建一个Google地图mashup并使用SQL 2008.

我将在地球上拥有大量的点,并希望在SQL中对它们执行各种计算 - 例如选择特定多边形中包含的所有点,或选择距离XY 10km内的所有点.

我之前从未使用过SQL空间功能.我应该使用geographygeometry数据类型吗?

geometry geography geospatial sql-server-2008

12
推荐指数
2
解决办法
1万
查看次数

选择具有大多边形的良好SQL Server 2008空间索引

我正在尝试为我正在处理的数据集选择一个不错的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

12
推荐指数
2
解决办法
1万
查看次数

如何从python获取已安装的GDAL/OGR版本?

如何从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本身.任何骰子?

python gis geospatial gdal ogr

12
推荐指数
2
解决办法
1万
查看次数

Rails + PostGIS错误迁移数据库

我跟随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)

有没有人知道如何解决这些问题?

postgresql postgis ruby-on-rails geolocation geospatial

12
推荐指数
2
解决办法
7806
查看次数

mongodb geoNear vs附近

看起来mongodb为地理空间查询提供了两个类似的功能 - $near$geoNear.根据mongo文档

geoNear命令提供$ near运算符的替代方法.除了$ near的功能外,geoNear还会返回其他诊断信息.

它看起来像geoNear提供了near功能的超集.例如,near似乎只返回最近的100个文档,而geoNear允许您指定最大值.是否有理由使用near而不是geoNear?一个比另一个更有效吗?

geospatial mongodb

12
推荐指数
1
解决办法
6902
查看次数

DbGeography上的coordinateSystemId

我需要使用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我是新来的空间数据,但我猜有一组明确的坐标系的例子吗?我似乎无法找到一个定义.

.net geospatial sql-server-2008-r2 entity-framework-5

12
推荐指数
2
解决办法
5007
查看次数

PostgreSQL PostGIS与ElasticSearch Spatial搜索

我正在研究一个需要进行地理空间过滤的搜索查询(即过滤掉一定半径以外的所有元素).我们将PostgreSQL和ElasticSearch作为我们基础架构的一部分,我正在评估两者中的哪一个使用.

我不是要求"哪个更好",但在易于实现,性能,可扩展性等方面,客观的优缺点列表会有所帮助.

postgresql postgis geospatial elasticsearch

12
推荐指数
1
解决办法
4783
查看次数

使用带有srid 4326的几何图形,STDistance返回的是什么度量单位?

所以这是我的设置:

我有一张桌子如:

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)

sql sql-server geospatial

12
推荐指数
3
解决办法
1万
查看次数

实体框架代码首先截断我的小数

我在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

12
推荐指数
1
解决办法
2924
查看次数