聊聊GIS中的坐标系

2023-10-31

本篇讲坐标系统的详细定义,有关坐标系的变换公式,以及简单说说高程坐标系统。

本文约6000字,阅读时间建议45分钟。硬内容比较多,如有疏漏错误请指出,建议有兴趣的朋友进一步阅读。

作者:博客园/B站/知乎/csdn/小专栏 @秋意正寒

版权:转载请告知,并在转载文上附上转载声明与原文链接(https://www.cnblogs.com/onsummer/p/12082454.html)。

目录

1. 地理坐标系统定义

1.1. 人类对地球形状的描述

1.2. 旋转椭球面方程

1.3. 球面坐标系与经纬度

1.4. 椭球与地理坐标系统

1.5. 参心地理坐标系统与地心地理坐标系统

1.6. WKT举例

1.7. 常见地理坐标系具体信息

2. 投影坐标系统定义

2.1. 详细定义公式

2.2. 正算公式与反算公式

2.3. 投影带问题

2.4. WKT举例

2.5. 投影坐标系统的xy和ArcGIS的xy

3. 高程系统

3.1. 1985国家高程基准

3.2. GPS的高度——大地高度vs海拔高度

4. 坐标系统转换

4.1. n参数(n=3,4,7)与地理转换

4.2. ArcGIS中重投影操作

4.3. 前端转换计算之turf.js

4.4. 前端转换计算之openlayers(6.x)

4.5. 前端转换计算之cesium

4.6. *硬改数据坐标系的定义

碎碎念

参考文档


1. 地理坐标系统定义

1.1. 人类对地球形状的描述

人类发现地球是个“赤道稍胖”的椭球后,就打算用一些数学或者物理的手段描述地球的形状。

早期,是用一个叫“大地水准面”的概念描述地球的,这个概念的说法是,地球海水静止后,海水面的形状就是地球的形状(陆地部分则想象海水穿过)。

后来,又提出了“似大地水准面”这一概念,它用的就不是海水面了,而是每个地方的重力线的顶点构成的面。

最后,为了便于数学计算,采用“椭球面”这一数学概念来描述地球形状。

在大地测量学中,“大地水准面”、“似大地水准面”所对应的“正高”、“正常高”是必须熟背于心的,但是在GIS中,本篇只讨论最后一个椭球面。

1.2. 旋转椭球面方程

根据解析立体几何,一个旋转椭球面的方程为:

它是个什么玩意儿呢?它是:

一个椭圆,这个椭圆以短轴为z轴,椭圆心为原点,然后绕z轴旋转而成的曲面。

网络图片, http://xuxzmail.blog.163.com/blog/static/251319162009618102642971
网络图片, http://xuxzmail.blog.163.com/blog/static/251319162009618102642971

用平行于xOy平面的面切这个椭球面,相交的形状是一个圆。

1.3. 球面坐标系与经纬度

根据解析立体几何,常用三种三维空间坐标系,笛卡尔空间直角坐标系、球面坐标系、柱面坐标系。

本节回答为什么三维的经纬度只有两个分量的问题。

球面坐标系的定义是怎么样的呢?

球面坐标是三维坐标,自然有三个分量:r、θ、φ

r表示该点到原点的距离;θ表示该点与原点连线和z轴的夹角;φ表示该点与原点连线在xOy平面的投影和x轴的夹角。

那么,经纬度呢?

我们假想x轴是赤道面上这么一根半径所在的直线:这根半径线段与0度经线相交,也即:

同理,y轴、z轴也有类似的定义。

但是,点P(经度,纬度,第三个分量)究竟是什么呢?

其实,经度就是φ,纬度就是θ。

“经度(φ)就是椭球上的点与原点连线这一线段,在赤道平面(xOy平面)上投影与x轴的夹角”——只不过加了东经和西经,并不是0到360°。

“纬度就是椭球上的点与原点连线这一线段,与z轴的夹角的余角。”——赤道上的点与原点连线和z轴的夹角是90度,但是纬度是0度,所以是余角的关系。

所以,第三个分量就十分明确了:r,表示点到原点(椭球心)的距离。但是,为什么平时只用经纬度呢?

那是因为这个r非常大,通常我们谈高度只谈海拔高度,并不谈到地心的距离,所以这个r是被忽略的,这就解释了明明是三维坐标,却只有经纬度两个分量。

如果文字啃得太生硬,可以看下图:

1.4. 椭球与地理坐标系统

根据1.2,得知椭球面方程有两个参数a和b。

根据1.1,得知地球的形状是椭球体,表面是椭球面。

所以,描述地球通常只需要这两个参数即可,我们下一个定义:

定义a为赤道半径,即椭球的长半轴长;

定义b为极半径,即椭球的短半轴长。

赤道半径为地心(椭球心)到赤道任意一点的距离,极半径为地心(椭球心)到任意一个极点的距离。

有这两个参数后,还可以延伸出扁率和偏心率这两个概念。扁率有1个,偏心率则有两个。公式定义如下:

 

 

e和e'分别是第一偏心率和第二偏心率。

有了椭球,我们就有了地球的形状。实际上,地理坐标系统(GCS)的定义绝大部分就是由椭球体这两个参数定义的,那么地理坐标系统又是如何定义的呢?

给个公式吧:

GCS = f(椭球体)

f是椭球体的球心对于地球实际中心的偏移。为什么要做偏移?见下节讲解。

1.5. 参心地理坐标系统与地心地理坐标系统

根据1.4,我们知道地理坐标系统是定义在一个数学椭球面上的,具体方程已经给出。

但是还有一个小问题:偏移。

虽然椭球面方程“决定”了地球的形状,但是原点的位置却没有指定。按理说,是统一使用地心才对的,还是处于“懒”,为了方便计算,会直接使用椭球的球心当原点。

事实上,如果地心≠椭球心,椭球面就会比较靠近某个地区,这当然是认为的,这种“靠近”就便于某个国家或地区的计算,因为一旦靠近,很多地方的位置偏差就很小。

我们说,

地心地理坐标系统:椭球的球心=地球的质心

参心地理坐标系统:椭球的球心≠地球的质心

当今为了全球计量需要,有两个我们熟知的地心地理坐标系:WGS84和CGCS2000。

也就是说,北京54和西安80实际上是两个参心坐标系,它们的椭球体分别是克拉索夫斯基1940椭球体和IUGG1975椭球体。

1.6. WKT举例

还是老话,WKT的文章太多了,不再赘述,只摘取一些比较简单的属性讲解。

①WGS84

GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0,
        AUTHORITY["EPSG","8901"]],
    UNIT["degree",0.0174532925199433,
        AUTHORITY["EPSG","9122"]],
    AUTHORITY["EPSG","4326"]]

GEOGCS定义了一个地理坐标系统,内部第一个属性是字符串"WGS 84"是这个地理坐标系的名字。

然后,这个地理坐标系统有基准面"DATUM",基准面下的"SPHEROID"是椭球体的意思,椭球体下的第二个、第三个属性是长半轴长和扁率的倒数。

最后AUTHORITY属性是这个地理坐标系的WKID信息,是4326.

②CGCS2000

GEOGCS["China Geodetic Coordinate System 2000",
    DATUM["China_2000",
        SPHEROID["CGCS2000",6378137,298.257222101,
            AUTHORITY["EPSG","1024"]],
        AUTHORITY["EPSG","1043"]],
    PRIMEM["Greenwich",0,
        AUTHORITY["EPSG","8901"]],
    UNIT["degree",0.0174532925199433,
        AUTHORITY["EPSG","9122"]],
    AUTHORITY["EPSG","4490"]]

和WGS84类似,不讲了。

1.7. 常见地理坐标系具体信息

这里不得不说的是,国家2000和WGS84几乎可以兼容,但是得先确定拿到的是真的国家2000的经纬度哦。

轶闻:其实还有一个新北京54坐标系的,WKID是4555,有兴趣的朋友可以查查这个坐标系的历史。

2. 投影坐标系统定义

2.1. 详细定义公式

PCS|x = f1(GCS|经纬度)

PCS|y = f2(GCS|经纬度)

简单解释一下:投影坐标系统的x坐标和y坐标分别由两个计算法则f1和f2计算,需要的参数有经度、纬度、椭球的参数。

2.2. 正算公式与反算公式

根据2.1,查阅资料,以4326做3857投影为例,以及CGCS2000做高斯克吕格投影为例。

不附代码。

① 网络墨卡托投影坐标系统

此处设网络墨卡托的地理坐标系统基于正球体,半径为R,点P的经纬度均为弧度十进制数:

x=R×弧度十进制经度

y=R×ln(tan(π/4 + 弧度十进制纬度/2))

此时,反算公式比较容易推导,不讲了。

② 高斯克吕格基于国家2000投影坐标系统

  • 预备参数:椭球长半轴a;椭球扁率f;椭球短半轴b;椭球的第一第二偏心率e1、e2。
  • 必备参数:经度J,纬度W

=====分割线=====

第一步,计算辅助量R、t、η、p、X、dL

  • (子午圈(就是所在投影带的中央经线圈)半径)
  • t=tanB
  • p=180*3600/π
  • (子午线弧长)
  • dL=B-中央经线度数

 第二步,计算辅助常量a0、a2、a4、a6、a8和m0、m2、m4、m6、m8:

  (这里e就是e1)

 第三步,计算xy坐标:

反算公式即从x、y坐标算经纬度坐标。

此处不做展开,有兴趣的朋友可以查阅文末的参考文档。 

2.3. 投影带问题

①换带操作

在arcgis中操作,其实只需要重投影即可。

一种方法是使用“投影”工具,将投影坐标系统的数据重新投影到它原本的地理坐标系统上,然后再用一次“投影”工具将地理坐标系统的数据再次投影到目标坐标系统上,完成换带。

另一种方法是直接用“投影”工具,将投影坐标系统的数据投影到目标PCS上即可。

具体操作见第4节。

②高斯克吕格投影坐标的判断

附一个坐标判断例子:

(41569821,4590855),已知在中国境内,已知地理坐标是国家2000.

横坐标是八位数,那么前两位一定是带号,41度带,那么就不可能是六度带,结果是三度带的高斯克吕格投影坐标系统,WKID是4529.

2.4. WKT举例

①网络墨卡托

PROJCS["WGS 84 / Pseudo-Mercator",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Mercator_1SP"],
    PARAMETER["central_meridian",0],
    PARAMETER["scale_factor",1],
    PARAMETER["false_easting",0],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AXIS["X",EAST],
    AXIS["Y",NORTH],
    EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs"],
    AUTHORITY["EPSG","3857"]]
  • 最外层是PROJCS,即投影坐标系统。
  • 第一个属性"WGS 84 / Pseudo-Mercator"是这个坐标系的名称。
  • 第二个属性GEOCS是这个投影坐标系统的地理坐标系统,详见上文。
  • 第三个属性PROJCTION是投影方法"Mercator_1SP"。
  • 第四~七个属性是其他属性,顺序下来是中央经线经度、比例因子、假东、假北。
  • 第八个属性是单,第九个、第十个属性分别指示X和Y的方向是东和北。
  • 第11个属性是此投影坐标系统在PROJ4中的定义。
  • 第12个属性是此投影坐标系统在EPSG中的WKID。

②国家2000的高斯投影

以WKID=4547为例:

PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 114E",
    GEOGCS["China Geodetic Coordinate System 2000",
        DATUM["China_2000",
            SPHEROID["CGCS2000",6378137,298.257222101,
                AUTHORITY["EPSG","1024"]],
            AUTHORITY["EPSG","1043"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4490"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",114],
    PARAMETER["scale_factor",1],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AUTHORITY["EPSG","4547"]]
  • 最外层是PROJCS,即投影坐标系统。
  • 第一个属性"CGCS2000 / 3-degree Gauss-Kruger CM 114E"是这个坐标系的名称。
  • 第二个属性GEOCS是这个投影坐标系统的地理坐标系统,详见上文。
  • 第三个属性PROJCTION是投影方法"Transverse_Mercator",横轴墨卡托的意思。
  • 第四~八个属性是其他属性,顺序下来是起始经线经度、中央经线经度、比例因子、假东、假北。
  • 第九个属性是单位。
  • 第十个属性是此投影坐标系统在EPSG中的WKID。

假东是什么意思?因为如果用赤道和中央经线的交点作为原点,投影得到的原始坐标会有负值。

我们记原始坐标为P,则给y坐标(经度方向)加500km后的P'就不会是负值了。

在P'的y坐标值(经线方向)加上带号,例如上图中的红色数字20,就成了带带投影带的坐标。

x方向的坐标一般不变,除非在地方坐标系中有需要,则设置假北(False North)。

2.5. 投影坐标系统的xy和ArcGIS的xy

在测量学的规定中,投影坐标系统上,x方向是指南北方向,y方向则是东西方向;

而在ArcGIS中,x方向则是东西方向,y方向是南北方向,正好颠倒。

所以,获取一份投影坐标系统的数据时,如果是正统的测量数据,那么y值应该在导入ArcGIS时被用于x,x值则用于y。

ps:我一直觉得,x和y只是一个记号,但是人就是那么喜欢用,换ab也可以,用uv也可以,切记:只是个符号,不要把xy的方向绝对化。

3. 高程系统

3.1. 1985国家高程基准

由1.3小节,我们知道球面坐标的第三个参数,点到椭球心(原点)的距离一般来说没什么用,我们听到更多的是“海拔高度”。

什么是海拔高度?珠穆朗玛峰海拔高度8844.43米,这个就是海拔高度。

那这个海拔高度的起点,也就是0米,是以那个地方的地面作为依据的呢?

答案就是,我国的“1985国家高程基准”,它的基准点位于青岛市某个地方,基准点高度为72.260m。

这个72.26m是什么意思呢?就是指,这个地方作为我国所有高程测量的起始值,别处测量的高度再加上72.26m即海拔高度。

3.2. GPS的高度——大地高度vs海拔高度

我们在文章开头1.1小节处,提及了正高和正常高两个概念,我们不引入太多测量学里的定义,但是,我国的高程系统一律是使用“正常高”的。

我们定义一个高度:大地高度H

大地高度是什么意思呢?大地高度就是点到椭球面的距离(沿着法线)。与1.3节定义的到椭球心的距离r相比,少了好长一截(暂停5分钟,读者可以想象一下)。

由卫星测得的高度就是大地高度。

那么大地高度H和我们说的海拔有什么关系呢?我们说我国高程测量是用“正常高”这个方法的,即重力等位面。

而我国的海拔高度又是基于正常高的,记作H',那么H和H'的关系是:

H=H'+a

这里的a代表的意义是,“正常高”为零时的那个面距离椭球面的高度。回忆一下1.1节的内容,这个面是什么?

“正常高”的面是重力等位面,也即似大地水准面。

我们画个图表示表示:

当然,大地水准面也有类似的图:

此时大地高度H=H'+N,N即大地水准面到椭球面的距离,H'即正高(实际点到大地水准面的距离)。

plus:美国GPS的经纬度定位精度是不错的,但是高程的测量就比较差。

4. 坐标系统转换

4.1. n参数(n=3,4,7)与地理转换

①n参数

一个坐标系统挪到另一个坐标系统,有哪些情况呢?

最简单的是平移原点,只需要给出三个方向的平移量dx、dy、dz,此时,称之为三参数转换;

复杂的还可以加上4个量:三个方向的旋转角度α、β、γ+统一的缩放比例k,称之为七参数转换;

另外,如果是平面上二维坐标系的转换,可以使用两个平移量dx、dy,一个旋转角度α,一个缩放比例k来完成。

举个例子,在珠海既有基于北京54的投影坐标系统又有珠海的自己的地方投影坐标,在这两种坐标之间转换就用到四参数。四参数的获取需要有两个公共已知点。

如果区域范围不大,最远点间的距离不大于 30Km( 经验值 ) ,这可以用三参数或者四参数。

坐标系统转换的实质就是地理坐标系统的转换,也即椭球体的转换。

当然,在书本上,会有投影坐标系统直接转换而不经过地理坐标系统的算法(《地理信息系统概论》黄杏元第三版),但是那个比较难。

②地理转换

在ArcGIS中,允许用户自定义七参数或三参数来进行不同椭球体(不同地理坐标系)的转换,当然,这些所谓的七参数和三参数的获取,至少在国内的转换中,是保密的,需要到有关部门购买相同位置的三个点的两个不同坐标系下的坐标,然后自己计算得到七参数。

有关这些参数的计算,参考更丰富的测量专业的书籍或者博客。

假设已经获取了七参数/三参数,那么可以在ArcMap中,使用“创建自定义地理(坐标)转换”工具为这些参数定义一个“地理转换”:

方法参数有很多,选一个需要的即可,不懂是啥的可以百度一下(我也没用过,大家可以边搜边试)。

4.2. ArcGIS中重投影操作

使用“地理转换”工具和“投影”/“投影栅格”工具。以下以矢量数据为例,使用“投影工具”。

①PCS1转PCS2(不同GCS)(使用投影工具)

跨不同地理坐标系统的转换,需要使用4.1提及的自定义地理(坐标)转换工具创建地理转换。

②PCS1转PCS2(相同GCS)(使用投影工具)

③PCS1回算PCS1.GCS(使用投影工具)

④GCS1转GCS2

两个不同地理坐标系的数据进行坐标系转换,需要使用4.1提及的自定义地理(坐标)转换工具创建地理转换:

此处为WGS84到国家2000,椭球不同,必须使用地理转换。

我们发现,需要地理转换的操作,通常就意味着跨地理坐标系统转换;

反过来说,跨地理坐标系统的转换就需要一个地理转换定义,也即n参数。

4.3. 前端转换计算之turf.js

turf.js只支持3857和4326的互转。

①使用turf.toWgs84()转换网络墨卡托的xy坐标到经纬度

②使用turf.toMercator()转换经纬度到xy网络墨卡托坐标

4.4. 前端转换计算之openlayers(6.x)

主要功能都在ol/proj模块下,另外在自定义坐标系和转换时会用到第三方库proj4.js,但本文非开发类的博客,不细展开。

①ol/proj.fromLonLat(coordinate, opt_projection)方法

fromLonLat方法将经纬度coordinate转换到目标坐标系opt_projection下,opt_projection默认值是"EPSG:3857",是“ProjectionLike”类型的参数。

对应方法是ol/proj.toLonLat()。

②ol/proj.get(string)

获取坐标系信息,string是"EPSG:3857"的字符串,必须大写EPSG。这个字符串在openlayer6中叫做“ProjectionLike”类型。

返回一个ol/proj/Projection类型的对象

③ol/proj.addCoordinateTransforms(source, destination, forward, inverse)

添加两个坐标系之间的转换方法,source是待转换坐标系,destination是目标坐标系,二者均以"EPSG:XXXX"的字符串传入。

forward是

④ol/proj.proj4.register(proj4)

让openlayer知道你注册了一个自定义坐标系统。详情请参考proj4.js有关资料。

⑤ol/proj.getTransform(source, destination)

给定待转换坐标系source和目标坐标系destination,返回二者之间的转换方法。

⑥ol/proj.transform(coordinate, source, destination)

将坐标点从source坐标系到destination坐标系转换,source和destination均为"EPSG:xxxx"的字符串(即“ProjectionLike”类型),EPSG四个字母大写。

4.5. 前端转换计算之cesium

cesium只支持4326和3857的互相转换。常用的类有如下几个:

①Cesium.MapProjection类

属性:

ellipsoid。Ellipsoid类型,即椭球。

方法:

project()和unproject()。一个用于将地理坐标转换为投影坐标,一个用于将投影坐标转回地理坐标。详见API。

②Cesium.GeographicProjection(ellipsoid)类

表示地理坐标系统的一个类,使用Ellipsoid类型的参数进行实例化。方法与MapProjection类相同。

默认构造参数是Ellipsoid.WGS84

③Cesium.WebMercatorProjection(ellipsoid)类

表示网络墨卡托投影坐标系统的一个类,使用Ellipsoid类型的参数进行实例化。

默认构造参数是Ellipsoid.WGS84(是不是很奇怪,和上面那个一样)

也拥有project()和unproject()两个方法。详见API。

④Cesium.Cartographic(longitude, latitude, height)类

这个类的意思就是一个地理坐标系统下的点,包括经度longitude,纬度latitude,和大地高度height

静态方法:

  • Cesium.Cartographic.fromCartesian(Cartesian3对象, ellipsoid, result):将投影坐标实例Cartesian3转换到地理坐标系统ellipsoid上,通常ellipsoid参数是Ellipsoid.WGS84。
  • Cesium.Cartographic.fromDegrees(经度,纬度,大地高度,result):创建一个地理坐标点
  • Cesium.Cartographic.fromRadians():同上只不过用弧度制
  • Cesium.Cartographic.toCartesian():将地理坐标转换为投影坐标

⑤Cesium.Cartesian3(x, y, z)类

笛卡尔坐标点,即投影坐标点。

该类也提供了类似Cartographic类的转换方法,详情请自行查阅API文档。

4.6. *硬改数据坐标系的定义

在gis软件中为数据重新定义一个坐标系,这有可能出现极大问题。通常不推荐做这种非精确的转换。

曾经在实践中遇到过类似的问题,就是很多情况下,有的人并不在意坐标系有多么精确,甚至有时候,能把数据强硬编辑挪到喜欢的位置上就罢了。

事实上,在精度不高的情况下(例如一个城市,或者一个城市群这么大级别的区域),直接改动数据的坐标系统的定义,而不是经过精确的地理转换、坐标转换计算,有时候在这么大的尺度下可能看不出来什么。

有个特例,WGS84和国家2000坐标系的改动——因为这两个坐标系的的确确很接近。什么?你跟我说硬改还是很大偏差?

那你考虑一下你是否拿到了真的国家2000坐标,而不是什么所谓的GCJ02和BD09。

 

碎碎念

又熬夜了,能在2019年结束前重写完坐标系这三篇博客,也算是对自己的一个承诺的实现了。

我知道在大地测量学专业上有更加精妙的计算,有更为严苛的定义和转换,但是,作为一个GIS从业者,能用上测量学和地图学的坐标系统成果,已经游刃有余了。

我希望我的读者也能明白这点,未来加油。

 

参考文档

[1] 高斯正反算公式:https://wenku.baidu.com/view/5776611cd4d8d15abf234e14.html

[2] 信息工程大学ppt:https://wenku.baidu.com/view/88fb6e0d84868762cbaed50d.html

[3] 扒一扒坐标转换之七参数:http://www.sohu.com/a/318537831_689260

[4] 写给测绘小白,讲解四参数与七参数坐标转换含义及区别:https://rtkhome.com/?p=1210

[5] 布尔莎-沃尔夫转换模型的几何证明:https://wenku.baidu.com/view/11bbf607ba1aa8114431d97f.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

聊聊GIS中的坐标系 的相关文章

  • 在生成 PDF 时,如何将 Google 地图(或其他 GIS 地图)输出嵌入到 PDF 中?

    我需要在服务器端生成 PDF 文档 其中包括地图 标记等 但据我所知 由于 JavaScript 依赖 这对于 Google 地图来说是不可能的 有没有办法使用 Google Maps API 来实现此目的 或者是否有其他免费 或便宜 的替
  • Topojson:如何在GIS软件中设计有效的多边形、线、点?

    到目前为止 我一直使用网络上的 GIS 文件 这些文件为我提供了行政多边形 河流 陆地等 然后我将它们转换为 Topojson 格式以提供 D3js 今天我必须在 Quantum GIS QGIS 中设计自己的图层 wine areas 同
  • R可以用于GIS吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想创建一些 GIS 绘图 我想知道 R 是否可以用于此目的 以下是一些与我想要制作的概念相似的绘图示例 美国的温度图 或等高线图 颜
  • ST_Buffer 相当于 MySQL 中基于圆的搜索吗?

    我需要使用 MySQL GIS 搜索具有指定圆内的点的行 伪代码示例查询是 select from gistable g where isInCircle g point circleCenterPT radius 看来 PostGIS 可
  • Google 街景中像素距地面的高度/标高

    我正在寻找谷歌街景中每个像素距地面的高度 我知道可以计算的几件事是 像素间距 https stackoverflow com questions 21591462 get heading and pitch from pixels on s
  • python 中的测地线缓冲

    给定土地多边形作为Shapely https pypi python org pypi Shapely MultiPolygon 我想找到代表例如的 多 多边形海岸线周围12海里缓冲区 使用匀称buffer方法不起作用 因为它使用欧几里德计
  • 找到两个多边形之间最短笛卡尔距离的最快方法是什么

    I have 1 个红色多边形说和50 个随机放置的蓝色多边形 它们位于地理2D space 找到红色多边形与其最近的蓝色多边形之间的最短距离的最快 速度测试算法是什么 请记住 这并不是将构成多边形顶点的点作为值来测试距离的简单情况 因为它
  • 使用 GeoPandas 计算其他多边形内的多边形面积

    我有两个GeoSeries df1 gpd GeoSeries Polygon 0 0 2 0 2 2 0 2 Polygon 1 5 1 5 4 2 4 4 2 4 Polygon 1 3 5 3 3 5 1 2 5 Polygon 1
  • 使用“gdal”将大彩色图像保存为“GTiff”

    我正在尝试保存尺寸较大的图像 15000 80000 3 这个数组是一个 numpy 数组 我初始化为im final np zeros 15000 80000 3 为了节省费用 我使用gdal像这样 dst ds gdal GetDriv
  • 如何将世界上所有国家/城市/州放入我的数据库?

    我有一个困难的架构和网络问题 我正在尝试为世界上每个城市制作一个关于徒步旅行的页面http www comehike com http www comehike com 我必须以某种方式导入世界上所有的城市 并按州构建它们 而州又按国家构建
  • 查找信标的两个地理位置之间的点

    假设我们有两个beacons放置在道路两侧 我们知道他们的latitude and longitude它们所在的位置 我们将它们视为一个位置 我们还知道distance两者之间以米为单位beacons 使用半正矢公式测量 我们的设备正在这两
  • 如何使用共享数据库在 Heroku 上进行 GIS 查询?

    我有一张带有纬度和经度的地理编码位置表 我希望我的数据库查询返回它们的过滤列表 按距固定点的距离排序 我探索过以下几个选项 Postgresql 的 Earthdistance 贡献 http www postgresql org docs
  • 如何将美国人口普查局的州级形状文件合并为全国性形状

    人口普查局不提供全国范围内公共使用微数据区域的形状文件 美国社区调查中可用的最小地理区域 我尝试用几种不同的方法将它们结合起来 但即使是消除重复标识符的方法一旦到达加利福尼亚州也会崩溃 我是在做一些愚蠢的事情还是需要一个困难的解决方法 下面
  • 老虎普查数据中的 Shape_area 和 ALAND AWATER

    Shape area 是什么意思 我注意到它不是 Aland 和 Awater 的总和 这三个的单位是什么 ALAND和AWATER的单位是平方米 例如 tl 2015 us county dbf康明县有记录ALAND 1477895811
  • 使用 SP 包中的 SpatialPoints() 转换坐标参考系 (CRS) 以创建空间数据框

    Issue 我有一个形状文件我已将其导入到 R 中 并为正在进行的分析选择了感兴趣的变量 我的最终目标是插值点数据 海豚 ID 获取海面温度 SST 堆栈中每个单独的光栅文件的值70 栅格来自名为 ncin SST 的对象 该对象是使用函数
  • 为什么我不能导入 geopandas?

    我唯一的代码行是 import geopandas 它给了我错误 OSError Could not find libspatialindex c library file 以前有人遇到过这个吗 我的脚本运行得很好 直到出现此错误 请注意
  • 空间索引无助于 SQL 查询(性能非常慢)

    我正在尝试测试包含 170 万个邮政编码的表中纬度 经度值的空间索引的性能 我创建了一个地理列并向其中添加了一个索引 但是使用空间索引的查询比在同一个表中的纬度 经度列上使用 正常 索引的查询要慢得多 至少 100 倍 但是查询计划显示索引
  • 如何从 OpenStreetMap 道路中去除水?

    我想从 OpenStreetMap 获取旧金山的轮廓 有一个SF 的关系 http www openstreetmap org relation 111968 但它含有大量的水 这使得城市居民无法识别 OSM 中是否有更好的旧金山多边形 有
  • 在python中查找地理数据中圆内的所有坐标

    我有数百万个地理点 对于其中的每一个 我想找到所有 邻近点 即某个半径 例如几百米 内的所有其他点 这个问题有一个简单的 O N 2 解决方案 简单地计算所有点对的距离 但是 因为我正在处理适当的距离度量 地理距离 所以应该有一种更快的方法
  • 需要帮助选择开源 GIS [已关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要一个开源 GIS 它允许人们使用 Web 浏览器查看 缩放 单击地图 并且应该兼容 Java 可部

随机推荐