面试题之GIS

标签: 无 分类: 未分类 创建时间:2022-05-17 14:56:18 更新时间:2024-11-23 02:04:27

1.GeoJSON和TopoJSON的区别是什么?

引用别人的话:TopoJSON的主要优点是规模。通过消除冗余并使用更高效的固定精度整数编码坐标,TopoJSON文件通常比GeoJSON文件小一个数量级。TopoJSON文件的第二个优点是编码拓扑结构具有有用的应用程序,例如拓扑保持简化(类似于MapShaper)和自动网格生成(如本例中的州状态边界)。这些优点的代价是:更复杂的文件格式。例如,在JavaScript中,通常会使用TopoJSON客户端库将TopoJSON转换为GeoJSON,以便与标准工具(如d3.geoPath)一起使用。(在Python中,您可以使用topojson.py。)另外,TopoJSON的整数格式需要量化坐标,这意味着如果不小心,它会引入舍入错误。(请参阅文档topojson -q。)对于不需要拓扑的几何图形的服务器端操作,GeoJSON可能是更简单的选择。否则,如果需要拓扑结构或想要通过电线将几何图形发送到客户端,请使用TopoJSON。

2.什么是矢量切片?

现在,矢量切片利用一些新技术来控制动态的可交互的地图展示方式,新技术可以让个人在移动端或者浏览器端自定义地图样式。矢量切片底图可以将基础底图和工作数据进行融合,扩展了底图的交互性。人们可以动态的赋予基础底图样式以及通过配合可交互的工作数据来设计底图样式,根据内容进行智能制图和实时分析并展示在基础地图上。

矢量切片是一种利用协议缓冲(Protocol Buffers)技术的紧凑的二进制格式用来传递信息。当渲染地图时矢量切片使用一系列储存的内部数据进行制图。被组织到矢量切片的图层(比如道路、水、区域),每一层都有包含几何图形和可变属性的独立要素(例如姓名、类型等等)。通俗的说,就是将矢量数据以建立金字塔的方式,像栅格切片那样分割成一个一个描述性文件,以GeoJson格式或者以pbf等自定义格式组织,然后在前端根据显示需要按需请求不同的矢量瓦片数据进行Web绘图。

矢量切片有切片的优势——成熟的缓存、缩放比例技术,另外还有矢量数据能够快速的提供地图映射的优势。如下图所示传统金字塔方式进行切图时在并没有要素或者要素相同的区域依然需要进行多级切片,而矢量切片只需要设定不同要素显示的级别即可。

3.空间函数及其分类?

空间数据库为分析几何信息、确定空间关系和操作几何图形提供了一套完整的空间函数。空间函数中的大部分可以被归纳为以下五类:

  • 转换 —— 在geometry(PostGIS中存储空间信息的格式)和外部数据格式之间进行转换的函数
  • 管理 —— 管理关于空间表和PostGIS组织的信息的函数
  • 检索 —— 检索几何图形的属性和空间信息测量的函数
  • 比较 —— 比较两种几何图形的空间关系的函数
  • 生成 —— 基于其他几何图形生成新图形的函数

函数列表可能非常长,OGC SFSQL定义了一组通用空间函数规范,PostGIS实现了这些规范(并另外实现了其他有用的空间函数)。

4.矢量数据和栅格数据的区别

这里他还提到了一个影像数据

5.常见的坐标系之间的转换方法

比如西安80转换为北京54的步骤

6.geoserver发布服务的流程

1.准备数据
2.新建命名空间
3.新建数据源
4.新建图层

7.智慧管网数据的处理流程

8.arcgis server发布服务的流程

1.在 ArcMap 中打开地图文档,在主菜单中单击文件 > 共享为 > 服务。
2.选择发布服务,然后单击下一步。
3.从选择连接下拉列表中选择要使用的 GIS Server 连接。
4.还可以在发布服务窗口中,输入新的服务名称。
5.默认情况下,服务会发布到 ArcGIS Server 站点(根目录)文件夹下。
6.选择要将服务发布到的文件夹,或创建一个用于包含此服务的文件夹,然后单击继续。将打开服务编辑器对话框。
7.为地图服务设置属性。
8.分析
9.修复所有错误 ,并预览
10.修复错误以及警告和消息(可选)后,单击发布

9.逆地理编码的实现思路

参考文章:
1.基于矢量数据的逆地理编码功能实现
2.geocoding基于地理编码和逆地理编码的算法问题(转载) 这里讲了一个 geohash 的概念,将经纬度zfjk,/|}?≥进行二进制编码,相近的地理位置有相同的前缀

10.Cesium加载管道的方法

11.数据切片的步骤

这里主要有 ArcGIS Server 数据切片,GeoWebCache切片,postgis中的矢量和栅格数据切片,还有一些单独的工具进行矢量切片。

12.海量数据和处理渲染思路

比如有十万点的优化。后来在群里看了有人问:“问一下大家,有搞过分布式计算么? 我现在的项目有100多个图层表,每个图层表的数据量很大,最大的一个表,有2000万个面要素,20个G的样子。主要的需求是 对这些图层 做 叠加分析 ,裁剪分析。想问一下大家,这么大的数据量,用postgis 合适么? 还是 要使用 Hadoop生态的大数据框架 进行分布式存储和计算,但是Hadoop怎么和GIS结合呢? 大家有这方面的经验么?” 之后有人说:greenplum Citus pgxl,苏宁用的是citus 腾讯的tbase 基于pgxl,greenplum是改造的postgresql,citus是个中间件,反正我之前用的pgxl搞了一套 千万级别数据浏览wms 三秒内。

参考文章:
1.如何优化海量空间数据查询~
2.geo-queries
3.基于PG与PostGIS的实时矢量瓦片服务——百万级要素优化 对于某些应用场景,数据量很容易达到百万级要素,数据每天都在改变。而且还要考虑在1-6级这种小级别时候的数据展示,那么这个时候仅仅是PG与PostGIS简单的矢量瓦片服务比较困难达到客户想要的效果,这个时候就要考虑做一些优化了。
4.The Postgres You Love,At Any Scale

13.常用的空间分析算法有哪些

项目开发中用过的空间分析方法有哪些?

14.有没有地图组件封装优化经验

15.团队规模和管理方法

16.数据处理框架使用过哪些

17.规划相关的算法有接触过吗?

比如道路面压盖问题,的相关性算法,

18.灾害影响范围的算法是怎样的?

这个是针对我参与的一个 灾害云平台 提问的。

19.底层的渲染引擎有没有接触过?

这个部分,我不太理解,难道只有leftlet才算是底图渲染引擎吗?

20.最短路径算法如何实现

21.数据预处理工具都用过哪些?

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。