在arcgis中投影坐标系krasovsky_1940_Albers怎么转换成wgs-1984-utm

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在arcgis中投影坐标系krasovsky_1940_Albers怎么转换成wgs-1984-utm相关的知识,希望对你有一定的参考价值。

这个问题解决了吗?是怎么解决的?谢谢。

两个投影坐标系本身基于的地理坐标系是不同的,即地理坐标系的采用的椭球体和基准面都不相同,无法实现直接转换,可以通过如下方式变换(以栅格数据为例,矢量数据思路类似):先通过arctoolbox——data management——projection and transformation——raster——project raster将krasovsky_1940_Albers投影转化为krasovsky_1940坐标,再通过arctoolbox——data management——projection and transformation——define projection将krasovsky_1940坐标定义为WGS-1984坐标,最后再通过arctoolbox——data management——projection and transformation——raster——project raster将WGS-1984坐标投影为wgs-1984-utm投影即可成功实现了。 参考技术A 跟其他转换一样的道路啊,krasovsky_1940_Albers其实是自定义的一个投影,它的椭球体为 Krasovsky_1940,如果是跟这个椭球体一样的转换,直接投影就行,如果不是,比如要西安80,或者cgcs2000等等,那就弄几个控制点,求下七参数之类的,然后自定义投影转换,然后再做投影转换就行。 参考技术B

两个投影坐标系本身基于的地理坐标系是不同的,即地理坐标系的采用的椭球体和基准面都不相同,如果想要进行较精确的转换(即通过如下方式变换:栅格数据arctoolbox——data management——projection and transformation——raster——define projection;矢量数据arctoolbox——data management——projection and transformation——feature——projection),则需要做一下地理(坐标)变换,而你所需的变换GIS里是没有的,需要自定义这样的转换关系,自定义转换关系就需要相应的变换参数(如七参数、三参数变换),如果没有搞不到变换参数,对精度要求没那么高的话,不妨通过下面几种方式直接改变坐标系(其实这样做也是进行了地理坐标变换,只不过参数是缺省值,而不是正确的参数值,其实就是没有进行正确的地理变换):ArcMap中:①通过改变数据框坐标系为你需要的坐标系,然后将数据导出,并选择数据框的坐标系 ;或②通过投影变换工具中的投影工具,直接将原坐标系改为你需要的坐标系;ArcCatalog中 ①通过数据属性对话框直接更改坐标系;或利用投影工具(同map)。

参考技术C 在arccatalog中进行重新定义坐标系就可以了。

如何从数组内的文档中投影特定字段?

【中文标题】如何从数组内的文档中投影特定字段?【英文标题】:How to project specific fields from a document inside an array? 【发布时间】:2016-02-23 05:38:19 【问题描述】:

这是一个典型的文档


   title : 'someTitle',
   places : [name : 'someName', location : 'someLocation', name ...]

我有以下查询

var qs = title : 'someTitle', places : $elemMatch : name : 'someName'   ;

我选择了一个与标题匹配的文档,并且该文档在其“places”数组中包含一个名称等于“someName”的文档条目。但是问题是places 数组中的条目是大型文档,我只需要该文档中的几个字段。我尝试像这样投影字段,但它不起作用。

var projection = 'places.$.name': 1, 'places.$.location' : 1;

它应该返回一个数组,其中的文档仅包含 'name''location' 属性。

我收到以下错误

Can't canonicalize query: BadValue Cannot specify more than one positional proj. per query.  

说清楚,我想在没有聚合框架的情况下完成这个

【问题讨论】:

这是预期的行为。您应该考虑编辑您的问题以显示具有预期结果的示例文档。 根据docs,如果没有聚合框架,您将无法做到这一点。 我将切换到 agg 框架,我只是弃权,因为它的计算量更大,这是我应用程序的核心部分。谢谢 在我的示例中我没有使用$elemMatch - 也许这就是我可以在数组上使用投影的原因。但我不得不省略$。我的投影看起来像这样var projection = 'places.name': 1, 'places.location' : 1;。在 MongoDB 3.4 中测试 【参考方案1】:

你做错了。根据documentation

投影文档中只能出现一个位置$ 运算符。

但是你仍然需要使用$ 操作符才能得到预期的结果:

var qs =  title : 'someTitle', 'places.name' : 'someName' ;
var projection = 'places.$': 1 ;
db.collection.find(qs, projection);

返回:


        "_id" : ObjectId("564f52d7d9a433df958b5630"),
        "places" : [
                
                        "name" : "someName",
                        "location" : "someLocation"
                
        ]

另外,您不需要 $elemMatch 运算符,请改用 "dot notation"。


现在,如果您想要的是数组中每个子文档的“名称”和“位置”数组,那么聚合就是要走的路。

db.collection.aggregate([
     '$match':  
        'title' : 'someTitle', 
        'places.name' : 'someName' 
    , 
     '$project':  
        'places': 
            '$map':  
                'input': '$places', 
                'as': 'place', 
                'in':  
                    'name': '$$place.name', 
                    'location': '$$place.location'
                
            
        
    
])

产量:


    "_id" : ObjectId("564f52d7d9a433df958b5630"),
    "places" : [
            
                    "name" : "someName",
                    "location" : "someLocation"
            ,
            
                    "name" : "bar",
                    "location" : "foo"
            
    ]

【讨论】:

【参考方案2】:

对于数组中的字段,可以像嵌入对象一样投影它们var projection = 'places.name': 1, 'places.location' : 1; 查看此指南https://docs.mongodb.com/manual/reference/operator/aggregation/project/#include-specific-fields-from-embedded-documents

【讨论】:

以上是关于在arcgis中投影坐标系krasovsky_1940_Albers怎么转换成wgs-1984-utm的主要内容,如果未能解决你的问题,请参考以下文章

ARCGIS中投影转换后为啥只是投影信息变了,图内坐标并没有变化?

OpenGL中投影矩阵基础知识

在 C++/OpenGL 中投影一个围绕另一个对象旋转的对象

如何从数组内的文档中投影特定字段?

在 mongodb 中投影集合类型数组的大小

如何从对象数组中投影所有嵌套文档?