标签: map-projections

如何在ggplot2中正确绘制投影网格化数据?

多年来我一直用它ggplot2来绘制气候网格数据.这些通常是预计的NetCDF文件.单元格在模型坐标中是方形的,但取决于模型使用的投影,在现实世界中可能不是这样.

我通常的方法是首先在合适的常规网格上重新映射数据,然后绘图.这引入了对数据的小修改,通常这是可以接受的.

但是,我已经确定这已经不够好了:我想直接绘制投影数据而不重新映射,因为其他程序(例如ncl)可以,如果我没有弄错的话,可以不触及模型输出值.

但是,我遇到了一些问题.我将从下面逐步详细介绍可能的解决方案,从最简单到最复杂,以及它们的问题.我们能克服它们吗?

编辑:感谢@ lbusett的回答,我得到了这个包含解决方案的好功能.如果您喜欢,请upvote @ lbusett的回答!

初始设置

#Load packages
library(raster)
library(ggplot2)

#This gives you the starting data, 's'
load(url('https://files.fm/down.php?i=kew5pxw7&n=loadme.Rdata'))
#If you cannot download the data, maybe you can try to manually download it from http://s000.tinyupload.com/index.php?file_id=04134338934836605121

#Check the data projection, it's Lambert Conformal Conic
projection(s)
#The data (precipitation) has a 'model' grid (125x125, units are integers from 1 to 125)
#for each point a lat-lon value is also assigned
pr …
Run Code Online (Sandbox Code Playgroud)

r netcdf proj ggplot2 map-projections

20
推荐指数
2
解决办法
3240
查看次数

我在哪里可以找到在墨卡托投影中绘制美国所需的坐标?

所以我正在编写一个Javascript库,它采用x,y坐标并使用它们绘制美国地图.为此,我需要找到绘制每个状态所需的坐标数据.维基百科上的这个地图是我需要的一个很好的例子,因为SVG文件包含组成每个州的形状很好地标记:http://upload.wikimedia.org/wikipedia/commons/3/32/Blank_US_Map.svg

我还有一组我需要放在这张地图上的网站.由于我知道每个站点的纬度和经度,我可以使用它来在地图上的适当位置绘制每个站点.不幸的是,为了实现这一点,我的地图需要使用墨卡托投影,这样就可以轻松映射lat,long到x,y像素坐标.

我上面提到的维基百科地图使用了一些其他投影,所以我不能将它用于此目的.有没有人知道我在Mercator投影中哪里可以找到这种类型的地图数据?任何数据格式都可以,只要我能以编程方式获取用于绘制每个状态的坐标并识别哪些形状构成每个状态.

gis map-projections mercator proj4js

16
推荐指数
2
解决办法
5497
查看次数

如何将距离从度数转换为米?

我正在使用OpenLayers和一个普通的墨卡托地图,我试图通过在latlong中找到一个点网格来对边界框进行采样.bbox以latlon表示,例如

48.1388,-15.3616,55.2057,-3.9359
Run Code Online (Sandbox Code Playgroud)

我可以用度数定义距离(例如x:2.5,y:2.4)并从那里计算出点数.但我想用(例如50000)来表达这个距离,以便将它与用户心态联系起来(人们理解米,而不是度数).我怎样才能转换这个距离?我知道如何重新投射一个点,但不是距离.

谢谢你的任何提示!Mulone

transform openlayers haversine map-projections proj4js

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

数学背后MKMetersPerMapPointAtLatitude

我正在尝试将一些Apple映射代码转换为Java.我有大部分转换正确,除了几个调用MKMetersPerMapPointAtLatitude

我有一个非常接近的解决方案......但这不是确切的,我不确定为什么不.有任何想法吗?

#import <Foundation/Foundation.h>
#import <Math.h>
@import MapKit;

#define MERCATOR_OFFSET 268435456.0 / 2.0
#define MERCATOR_RADIUS (MERCATOR_OFFSET/M_PI)
#define WGS84_RADIUS 6378137.0
#define POINTS_PER_METER (MERCATOR_RADIUS / WGS84_RADIUS)

double MyMetersPerMapPointAtLatitude(double latitude) {
    return 1.0 / (POINTS_PER_METER / cos(latitude * M_PI / 180.0));
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        double latitude = 33.861315;
        for (int i = 0; i < 100; i++) {
            double a = MKMetersPerMapPointAtLatitude(latitude);
            double b = MyMetersPerMapPointAtLatitude(latitude);

            NSLog(@"%f %f", a, b);
            latitude += .1;
        } …
Run Code Online (Sandbox Code Playgroud)

math objective-c map-projections apple-maps

14
推荐指数
1
解决办法
353
查看次数

Java - Hibernate criteria.setResultTransformer()使用默认值初始化模型字段

我是Hibernate的新手,我正试图从数据库中获取一些数据.我不想获得完整的数据,而是实体的投影.

问题是在for循环中,当我得到我的投影的id和名称时,它得到默认值id = 0和name = null而不是id = 7和name ="Name 8"这是记录的数据库中的原始实体.你知道导致这个问题的原因吗?for循环在最后一个代码中.

这是学生实体

@Entity(name = "Students")
public class Student {
    @Id
    @GeneratedValue
    @Column(name = "StudentId")
    private int id;

    @Column(name = "Name", nullable = false, length = 50)
    private String name;

    @Column(name = "Grade")
    private Double grade = null;

    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name = "FacultyId", nullable = false)
    private Faculty faculty;

    @ManyToMany(cascade = CascadeType.PERSIST)
    @JoinTable(
        joinColumns = @JoinColumn(name = "StudentId"),
        inverseJoinColumns = @JoinColumn(name = "CourseId"))
    private Collection<Course> courses;

    public Student() {
        this.courses = …
Run Code Online (Sandbox Code Playgroud)

java hibernate hibernate-criteria map-projections

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

如何剪裁或裁剪或白色填充大.使用ggplot2在多边形外部扩展(10%)矩形

这个问题是我之前提出的SO问题的后续问题,与此问题有关.

我只是试图用ggplot2填充比简单多边形大10%的区域.也许我把事情分组了?这是一张尖峰照片,下面有可重现的代码

在此输入图像描述

# reproducible example
library(rgeos)
library(maptools)
library(raster)

shpct.tf <- tempfile() ; td <- tempdir()

download.file( 
    "ftp://ftp2.census.gov/geo/pvs/tiger2010st/09_Connecticut/09/tl_2010_09_state10.zip" ,
    shpct.tf ,
    mode = 'wb'
)

shpct.uz <- unzip( shpct.tf , exdir = td )

# read in connecticut
ct.shp <- readShapePoly( shpct.uz[ grep( 'shp$' , shpct.uz ) ] )

# box outside of connecticut
ct.shp.env <- gEnvelope( ct.shp )
ct.shp.out <- as( 1.2 * extent( ct.shp ), "SpatialPolygons" )


# difference between connecticut and its …
Run Code Online (Sandbox Code Playgroud)

gis r map ggplot2 map-projections

10
推荐指数
2
解决办法
439
查看次数

在不规则网格上绘制数据的有效方法

我使用组织在不规则二维网格上的卫星数据,其尺寸为扫描线(沿轨道尺寸)和地面像素(跨越轨道尺寸).每个中心像素的纬度和经度信息存储在辅助坐标变量中,以及四个角坐标对(纬度和经度坐标在WGS84参考椭球上给出).数据存储在netCDF4文件中.

我想要做的是在投影地图上有效地绘制这些文件(可能还有文件的组合 - 下一步!).

我的做法,到目前为止,灵感来自杰里米的Voisey的回答这个问题,一直在打造我的兴趣可变连杆的像素边界的数据帧,并使用ggplot2geom_polygon用于实际的情节.

让我来说明我的工作流程,并提前为天真的方法道歉:我刚开始用一周或两周的R编码.

注意

要完全重现问题:
1.下载两个数据帧:so2df.Rda(22M)和pixel_corners.Rda(26M)
2.在您的环境中加载它们,例如

so2df <- readRDS(file="so2df.Rda")
pixel_corners <- readRDS(file="pixel_corners.Rda")
Run Code Online (Sandbox Code Playgroud)
  1. 跳转到"合并数据帧"步骤.

初始设置

我要从我的文件中读取数据和纬度/经度边界.

library(ncdf4)
library(ggplot2)
library(ggmap) 
# set path and filename
ncpath <- "/Users/stefano/src/s5p/products/e1dataset/L2__SO2/"
ncname <- "S5P_OFFL_L2__SO2____20171128T234133_20171129T003956_00661_01_022943_00000000T000000"  
ncfname <- paste(ncpath, ncname, ".nc", sep="")
nc <- nc_open(ncfname)

# save fill value and multiplication factors
mfactor = ncatt_get(nc, "PRODUCT/sulfurdioxide_total_vertical_column", 
                    "multiplication_factor_to_convert_to_DU")
fillvalue = ncatt_get(nc, "PRODUCT/sulfurdioxide_total_vertical_column", 
                      "_FillValue")

# read the SO2 total column variable
so2tc <- …
Run Code Online (Sandbox Code Playgroud)

r netcdf ggplot2 map-projections r-sf

10
推荐指数
1
解决办法
575
查看次数

如何使用PROJ.4将坐标从WGS84转换为投影中的坐标?

我在WGS84,我想转变为一个地图投影使用SWEREF99 TM协调GPS坐标PROJ.4在Java或Proj4js在JavaScript中.

很难找到PROJ.4的文档以及如何使用它.如果您有良好的链接,请将其作为评论发布.

SWEREF99 TM的PROJ.4参数是+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs

我试图使用PROJ.4 Java库进行转换Lat: 55° 00’ N, Long: 12° 45’ E并尝试使用此代码:

String[] proj4_w = new String[] {
 "+proj=utm",
 "+zone=33",
 "+ellps=GRS80",
 "+towgs84=0,0,0,0,0,0,0",
 "+units=m",
 "+no_defs"
};

Projection proj = ProjectionFactory.fromPROJ4Specification(proj4_w);  

Point2D.Double testLatLng = new Point2D.Double(55.0000, 12.7500);
Point2D.Double testProjec = proj.transform(testLatLng, new Point2D.Double());
Run Code Online (Sandbox Code Playgroud)

这给了我一点,Point2D.Double[5197915.86288144, 1822635.9083898761]但我应该N: 6097106.672, E: 356083.438 是我做错了什么?我应该使用什么方法和参数呢?

正确的值取自Lantmäteriet.

我不确定是否proj.transform(testLatLng, new Point2D.Double());使用正确的方法.

java wgs84 proj map-projections proj4js

9
推荐指数
1
解决办法
7123
查看次数

如何将2d网格点(x,y)映射到球体上作为3d点(x,y,z)

我有一组2d网格点(x,y),我想将其作为3d点(x,y,z)映射/投影到球体上.

我知道随着abs(y)的增加会对极点产生一些翘曲,但是我的网格补丁只能覆盖赤道附近的一部分球体,因此可以避免严重的翘曲.

我很难找到合适的方程式.

math 3d geometry map-projections

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

将Web Mercator磁贴重新投影到D3的任意投影?

杰森·戴维斯(Jason Davies)用“ 重新投影的栅格图块”引爆我们已经过去了几年,地图因Mapbox阻止了他的站点而停止工作,但是Mollweide水彩画和《中断的古德栅格》仍然是不错的演示。

现在在Observable HQ上,我看到了有关最新d3-geo-projectiond3-tile的文档,但是没有关于Jason所做的操作的现代示例:重新投影标准Mercator贴图集。

我如何才能使d3平铺扭曲到新的投影?

javascript gis map-projections d3.js

9
推荐指数
1
解决办法
273
查看次数