聊聊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中的坐标系 的相关文章

  • 自由格式文本的通用地址解析器

    我们有一个显示地图数据的程序 想想谷歌地图 但为我们的客户提供更多的交互性和自定义图层 我们允许通过一组组合框进行导航 这些组合框预先填充了一堆数据的某些字段 即 国家 加拿大 填写了省份字段 选择安大略省 然后填写了县 地区列表 选择一个
  • 如何在地图上找到对角线周围的边界矩形? (地理位置)

    用户在地图上画一条线 并希望查找该线特定距离内的一些信息 我有A and B地点位于 经纬度 格式 用户告诉我距离 A和A1之间的距离 in 米 公里 我该如何计算A1 A2 B1 B2地点位于 经纬度 格式 我正在使用 C 并且坐标锐利
  • 在R中添加一列两个坐标的距离

    我有一个这样的数据框 id value lat1 lng 1 lat2 lng2 dist 124 50 4 13 2423 46 2342 13 2423 46 2342 537 34 2 13 2434 46 2331 13 2423
  • 用于解析MapInfo TAB格式的Java API

    我正在用 Java 解析 MapInfo TAB 格式文件 它由一组四个文件组成 即 TAB ID MAP 和 DAT 在网上搜索后 我在这个存储库中发现了 GeoTools 提供的解析器 https github com geotools
  • 在哪里以及如何安装 ArcPy for Python 2.7?

    我检查过http www lfd uci edu gohlke pythonlibs http www lfd uci edu gohlke pythonlibs http help arcgis com en arcgisdesktop
  • 如何从 python 获取已安装的 GDAL/OGR 版本?

    如何从 python 获取已安装的 GDAL OGR 版本 我知道gdal config计划 目前正在使用以下内容 In 3 import commands In 4 commands getoutput gdal config versi
  • 设计 WPF 地图控件

    我正在考虑在 WPF 中制作一个简单的地图控件 并且正在考虑基本地图界面的设计 并且想知道是否有人对此有一些好的建议 我想到的是使用 ScrollViewer 无滚动条 作为我的 视图端口 然后将所有内容堆叠在画布上 从 Z Index 0
  • python:使用 gdal 绑定在内存中执行 gdalwarp

    我目前有一个加工链R下载MODIS数据然后调用gdalwarp从系统将特定子数据集 例如 NDVI 重新投影到 WGS1984 中 所结果的GeoTiffs然后被收集到一个HDF5文件以供进一步处理 现在我将处理链移至python 我想知道
  • python 中的测地线缓冲

    给定土地多边形作为Shapely https pypi python org pypi Shapely MultiPolygon 我想找到代表例如的 多 多边形海岸线周围12海里缓冲区 使用匀称buffer方法不起作用 因为它使用欧几里德计
  • 如何使用 GDAL 从 tiff 和 4 个角纬度和经度创建 geotiff [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一张没有 TIFF 格式地理数据的图像 地图 我需要从我的图像中获取 GeoTIFF 文件 我的地
  • GPS/GIS 计算:根据运动/每小时预测未来位置的算法?

    寻找资源或算法来在导航应用程序中计算以下内容 如果我当前的 GPS 位置为 0 0 并且我以 15 英里 小时的速度前进 32 度 我如何计算 10 秒后我的位置 i e GPSCoordinate predictedCoord GPSCo
  • 如何在 OpenLayers 4 上添加点击事件?

    我需要将事件侦听器附加到 OpenLayers 4 中的功能 我已经尝试过feature on 点击 function 但它不起作用 如何将晒黑事件添加到功能中 先感谢您 没有click为功能注册的事件ol Feature目的 但click
  • 如何从 NoSQL DBMS(如 DynamoDB)存储 GPS 坐标并搜索半径范围内的地点

    我的团队需要像 DynamoDB 这样的 DBMS 来存储大量数据 主要是位置和坐标 我考虑过使用一些基于 GIS 的 DBMS 例如 PostGIS 并在 POINT 上建立索引 但 DynamoDB 似乎非常适合我们的使用 存储坐标并快
  • 查找信标的两个地理位置之间的点

    假设我们有两个beacons放置在道路两侧 我们知道他们的latitude and longitude它们所在的位置 我们将它们视为一个位置 我们还知道distance两者之间以米为单位beacons 使用半正矢公式测量 我们的设备正在这两
  • 将 R data.frame 转换为 Javascript 数组

    我想将数据框的某些列保存为特定格式 JavaScript 格式 我尝试过使用toJSON from rjson包但这不起作用 我的结果应该是这样的 http leaflet github io Leaflet markercluster e
  • SVG中的地理识别位置(GeoLocation/GeoTag)

    我想知道如何对 SVG 地图进行地理标记 我的搜索结果 地理标签以元数据格式提供 例如Exif http www awaresystems be imaging tiff tifftags privateifd gps html XMP h
  • 通过非 sf 列内连接两个 sf 对象

    我尝试使用内连接或左连接连接两个 sf 数据帧 这些数据框内部都有几何列 我不断收到错误 check join x y 中的错误 y 应该是一个数据框 对于空间连接 请使用 st joinFALSE 下面的可重现示例 df1 lt data
  • 老虎普查数据中的 Shape_area 和 ALAND AWATER

    Shape area 是什么意思 我注意到它不是 Aland 和 Awater 的总和 这三个的单位是什么 ALAND和AWATER的单位是平方米 例如 tl 2015 us county dbf康明县有记录ALAND 1477895811
  • 使用多边形图层下方的轮廓线切割多边形

    我想根据高程将多边形图层切割成两部分 上部和下部 多边形可能是凸的或凹的 并且切割的位置可能彼此不同 等高线的间隔为 5m 这意味着我可能需要生成一个具有更紧凑的等高线的等高线 例如 1m 的间隔 关于如何做到这一点的任何想法 在 ArcG
  • gis计算点和多边形/边界之间的距离

    我想使用 python 计算一个点到一个国家边界之间的距离shapely 它应该工作得很好 point distance poly 例如在这里展示查找多边形形状上最近点的坐标 https stackoverflow com question

随机推荐