标签: gis

包含原始详细多边形的简化(或平滑)多边形

我有一个详细的2D多边形(代表一个地理区域),它由一组非常大的顶点定义.我正在寻找一种算法,它将简化和平滑多边形(减少顶点的数量),其约束条件是生成的多边形的区域必须包含详细多边形的所有顶点.

对于上下文,这是一个复杂多边形边缘的示例:

在此输入图像描述

我的研究:

感谢您给我的任何建议!

gis algorithm geometry polygon computational-geometry

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

如何将纬度/经度对转换为PostGIS地理类型?

我正在尝试将一堆纬度/经度对加载到PostGIS地理类型中,以便能够按位置进行查询.

特别是我有一个浮动纬度和经度列和一geography(Point, 4326)列的表.我想要做

update mytable set geography = ???
Run Code Online (Sandbox Code Playgroud)

文档似乎表明以下内容应该有效:

update mytable set geography = ST_GeogFromText('POINT(' || latitude || ' ' ||
                                                           longitude || ')');
Run Code Online (Sandbox Code Playgroud)

它没有.我不知道它是什么意思解释这一点,但它只允许经度介于-90和90之间,所以它显然不是经度.

那么,我该怎么办?

database gis postgresql postgis

31
推荐指数
3
解决办法
2万
查看次数

计算邮政编码...和用户之间的距离.

这是一个挑战问题,而不是我迫切需要的东西,所以不要整天花在它们身上.

我在2000年左右建立了一个约会网站(早已不复存在),其中一个挑战是计算用户之间的距离,以便我们可以在半径X英里内展示您的"匹配".为了说明问题,给定以下数据库模式(粗略地):

USER TABLE UserId UserName ZipCode

ZIPCODE表ZipCode纬度经度

USER和ZIPCODE加入USER.ZipCode = ZIPCODE.ZipCode.

您将采取什么方法来回答以下问题:在给定用户的邮政编码的X英里范围内的其他用户使用的邮政编码.

我们使用了2000年人口普查数据,其中包含邮政编码表及其近似的经纬度.

我们还使用Haversine公式来计算球体上任意两点之间的距离......非常简单的数学.

至少对我们来说,这个问题是我们19岁的大学生,真正成为了如何有效地计算和/存储从所有成员到所有其他成员的距离.一种方法(我们使用的方法)是导入所有数据并计算从每个邮政编码到每个其他邮政编码的距离.然后,您将存储并索引结果.就像是:

SELECT  User.UserId
FROM    ZipCode AS MyZipCode
        INNER JOIN ZipDistance ON MyZipCode.ZipCode = ZipDistance.MyZipCode
        INNER JOIN ZipCode AS TheirZipCode ON ZipDistance.OtherZipCode = TheirZipCode.ZipCode
        INNER JOIN User AS User ON TheirZipCode.ZipCode = User.ZipCode
WHERE   ( MyZipCode.ZipCode = 75044 )
        AND ( ZipDistance.Distance < 50 )
Run Code Online (Sandbox Code Playgroud)

当然,问题是ZipDistance表中会有很多行.它并非完全不可行,但它确实很大.此外,它需要对整个数据集进行完整的预处理,这也不是无法管理的,但不一定是可取的.

无论如何,我想知道你们中的一些大师会对这样的事情采取什么方法.此外,我认为这是程序员不时要解决的常见问题,特别是如果您考虑的算法类似的问题.我对一个彻底的解决方案很感兴趣,其中至少包括所有部分的HINTS,以便快速有效地完成这项工作.谢谢!

database gis zipcode geocoding distance

31
推荐指数
3
解决办法
4万
查看次数

随机地理坐标(在陆地上,避免海洋)

关于如何生成地球上的随机坐标(纬度/经度)的任何聪明的想法?纬度/经度.精确到5点,避免水体.

    double minLat = -90.00;
    double maxLat = 90.00;      
    double latitude = minLat + (double)(Math.random() * ((maxLat - minLat) + 1));
    double minLon = 0.00;
    double maxLon = 180.00;     
    double longitude = minLon + (double)(Math.random() * ((maxLon - minLon) + 1));
    DecimalFormat df = new DecimalFormat("#.#####");        
    log.info("latitude:longitude --> " + df.format(latitude) + "," + df.format(longitude));
Run Code Online (Sandbox Code Playgroud)

也许我生活在一个梦想的世界里,水话题是不可避免的......但希望有一个更好,更清洁,更有效的方法来做到这一点?

编辑

一些奇妙的答案/想法 - 然而,在规模上,让我们说我需要生成25,000个坐标.由于延迟,成本和一些其他因素,去外部服务提供商可能不是最佳选择.

java gis geocoding

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

快速的Haversine逼近(Python/Pandas)

Pandas数据帧中的每一行包含2个点的lat/lng坐标.使用下面的Python代码,计算许多(数百万)行的这两个点之间的距离需要很长时间!

考虑到2点相距不到50英里并且准确性不是很重要,是否可以更快地进行计算?

from math import radians, cos, sin, asin, sqrt
def haversine(lon1, lat1, lon2, lat2):
    """
    Calculate the great circle distance between two points 
    on the earth (specified in decimal degrees)
    """
    # convert decimal degrees to radians 
    lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
    # haversine formula 
    dlon = lon2 - lon1 
    dlat = lat2 - lat1 
    a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
    c = 2 * asin(sqrt(a)) 
    km = 6367 * c …
Run Code Online (Sandbox Code Playgroud)

python gis numpy haversine pandas

31
推荐指数
4
解决办法
2万
查看次数

R可以用于GIS吗?

我想创建一些GIS图,我想知道R是否可以用于此.以下是一些我在概念上与我想要的类似的情节示例:

  • 美国的温度图(或等高线图),颜色(或高度)由州GDP确定.因此,状态边界会在结果图中产生不连续性.
  • 美国的温度图,其中海拔高度用于数据.在这种情况下,结果图应在州界之间平滑变化.
  • 上述2个图的总和(应用了一些缩放).

我刚刚开始学习R,并想知道它是否适合这种工作.查看ggplot2的coord_map,看起来可能会将数据叠加到美国.但是,获取数据以尊重州界可能非常困难.

有什么建议?

gis plot r raster ggplot2

30
推荐指数
1
解决办法
6617
查看次数

sp :: over()用于多边形分析中的点

我有一个名为"ind_adm"的shapefile和一个名为"pnts"的SpatialPointsDataFrame."pnts"包含随机生成的点,并且一些点与多边形重叠.见下图. 在此输入图像描述

现在,我想在多边形分析中做一点,即我想找出哪些点位于代表印度边界的灰色多边形内.为此我在sp库中使用over()函数.

pt.in.poly <- sp::over(ind_adm, pnts, fn = mean) #do the join
Run Code Online (Sandbox Code Playgroud)

但是,我得到的输出是

    >pt.in.poly
    values
    0 6.019467
Run Code Online (Sandbox Code Playgroud)

我应该得到多边形"在"中的点的索引.

我哪里错了?

gis r polygon shapefile

30
推荐指数
3
解决办法
2万
查看次数

我在哪里可以获得所有国家/地区的邮政编码?

我曾经读过有关地理定位数据的邮政编码的开源数据库,但现在我记不起它的名字了.有人可以帮忙吗?

database gis geolocation postal-code

28
推荐指数
3
解决办法
4万
查看次数

栅格化GDAL层

编辑

这是正确的方法,以及文档:

import random
from osgeo import gdal, ogr    

RASTERIZE_COLOR_FIELD = "__color__"

def rasterize(pixel_size=25)
    # Open the data source
    orig_data_source = ogr.Open("test.shp")
    # Make a copy of the layer's data source because we'll need to 
    # modify its attributes table
    source_ds = ogr.GetDriverByName("Memory").CopyDataSource(
            orig_data_source, "")
    source_layer = source_ds.GetLayer(0)
    source_srs = source_layer.GetSpatialRef()
    x_min, x_max, y_min, y_max = source_layer.GetExtent()
    # Create a field in the source layer to hold the features colors
    field_def = ogr.FieldDefn(RASTERIZE_COLOR_FIELD, ogr.OFTReal)
    source_layer.CreateField(field_def)
    source_layer_def = source_layer.GetLayerDefn() …
Run Code Online (Sandbox Code Playgroud)

python gis gdal rasterizing

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

使用Python中的geoJSON指向Polygon

我有一个包含大量多边形的geoJSON数据库(特别是人口普查区),我有很多长的纬度点.

我希望有一个有效的Python代码来识别给定坐标所在的人口普查区域,但到目前为止我的谷歌搜索还没有透露任何内容.

谢谢!

python gis geometry geojson

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