proj4leaflet.js 百度地图proj4def 怎么获得

6616人阅读
leaflet(4)
javascript(5)
显示以像素为单位的点的x,y坐标。
所以接受点对象的leaflet方法和选项都也接受他们简单数组的形式。
Constructor(函数构造器)
L.Point():用给定点的x和y坐标来创建点对象。如果round设置为true,则将x和y的值转换为圆中。?
Properties(属性)
x:x坐标。
y:y坐标。
Methods(方法)
add():返回当前点和给定点的和。
subtract():返回当前点和给定点的差。
multiplyBy():返回当前点和给定值的积。
divideBy():返回当前点和给定值的商。如果round设置为true,则返回一个圆的结果。
distanceTo():返回当前点与给定的的距离。
clone():返回当前的副本。
round():返回当前的在圆上的坐标的副本。
equals():如果点坐标相同则返回true。
toString():在调试时显示点的字符串的形式。
用像素坐标表示的矩形的区域。
所以接受边界对象的leaflet方法和选项都也接受他们简单数组的形式。
Constructor(函数构造器)
L.Bounds(左上角点,右下角点):用两个坐标(通常是左上角的点和右下角的点)来创建边界对象。
L.Bounds(点集):用包含的点创建边界对象。
Properties(属性)
min:矩形左上角点。
max:矩形右下角点。
Methods(方法)
extend():将包含给定点的边界延伸。
getCenter():返回边界的中心点。
contains():如果矩形包含给定的边界则返回true。
contains():如果矩形包含给定点则返回true。
intersects():如果矩形与给定边界相交则返回true。
isValid():如果边界可以被初始化则返回true。
getSize():返回边界的大小。
创建注记时显示的图标。
Constructor(函数构造器)
L.Icon():通过给定的选项创建图标实例。
Options(选项)
iconUrl:请求图标图片的URL(脚本中的绝对或相对路径)。
iconRetinaUrl:图标图片视网膜视图下的尺寸的URL。用于视网膜屏幕的设备。
iconSize:图标图片的像素大小。
iconAnchor:图标提示的坐标(在左上角)。图标是对其的,所以这个点是注记的地理位置。如果大小是指定的则位于中心处,也可以在CSS中设置负边界。
shadowUrl:图标阴影图的URL。如果没有指定,图标没有阴影。
shadowRetinaUrl:图标在视网膜视图下的尺寸的URL。如果没有指定,图标没有阴影。用于视网膜屏幕的设备。
shadowAnchor:阴影的提示坐标(在左上角)(如果没有指定则与iconAnchor相同)。
popupAnchor:与图标锚相关的打开弹出框的点的坐标。
className:图标和阴影图片的自定义的类名。默认为空。
用div要素而非图片来轻量级地显示注记的图标。
默认情况下,阴影会有一个小的白色的方形作为leaflet-div-icon类和样式。
Constructor(函数构造器)
L.DivIcon():用给定的选项实例化图标。
Options(选项)
iconSize:图标的像素大小。也可以通过CSS设置。
iconAnchor:图标提示的坐标(在左上角)。图标是对其的,所以这个点是注记的地理位置。如果大小是指定的则位于中心处,也可以在CSS中设置负边界。
className:用于对其图标的自定义的类名,默认为leaflet-div-icon。
html:在div要素中自定义的HTML代码,默认为空。
所有leaflet控制的基础类。继承自IControl接口。
Constructor(函数构造器)
L.Control():通过给定的选项创建一个控制。
Options(选项)
position:控制初始的位置(在地图的某一角)。参见control positions。
Methods(方法)
setPosition():设置控制的位置。参见control positions。
getPosition0():返回控制的当前位置。
addTo():将控制添加到地图上。
removeFrom():将控制从地图上移除。
Control Positions(控制的位置)
topleft:地图的左上角。
topright:地图的右上角。
bottomleft:地图的左下角。
bottomright:地图的右下角。
L.Control.Zoom
拥有两个按钮(放大和缩小)的级别的缩放控制。默认地图上是有的,除非设置zoomControl选项为false。
Constructor(函数构造器)
L.Control.Zoom():创建缩放控制。
Options(选项)
position:控制的位置(在地图的某一角)。参见control positions。
L.Control.Attribution
可以在地图上一个小的文本盒子中显示属性数据的属性控制。默认地图上是有的,除非设置attributionControl选项为false,并且它自动地通过getAttribution方法获取图层的属性文本。继承自Control。
Constructor(函数构造器)
L.Control.Attribution():创建属性控制。
Options(选项)
position:控制的位置(在地图的某一角)。参见control positions。
prefix:在属性之前显示的HTML文本。传递false来使其不显示。
Methods(方法)
setPrefix():在属性之前设置文本。
addAttribution():添加属性文本。
removeAttribution():移除属性文本。
L.Control.Layers
图层控制使用户可以在不同的底图之间切换,并可以控制覆盖物的开关。继承自Control。
Constructor(函数构造器)
L.Control.Layers():通过给定的图层创建数据控制。基础图层通过单选项进行切换,覆盖物通过复选框切换显示。
Methods(方法)
addBaseLayer():通过给定的控制名称添加基础层(通过单选按钮实体)。
addOverlay():凸显给定的控制名称添加覆盖物(通过复选框实体)。
removeLayer():将图层从控制中移除。
Options(选项)
position:控制的位置(在地图的某一角)。参见control positions。
collapsed:如果为true,控制可以收缩为一个图标,在鼠标置于上方或点触时展开。
autoZIndex:如果为true,控制的图层升序地叠置对齐,在切换图层打开或关闭时,顺便不变。
Events(事件)
baselayerchange:当基层层通过控制更改时触发。
L.Control.Scale
显示在十进制或公制的屏幕当前中心的比例的简单比例尺控制。继承自IControl接口。
Constructor(函数构造器)
L.Control.Scale():通过选项创建比例控制。
Options(选项)
position:控制的位置(在地图的某一角)。参见control positions。
maxWidth:控制最大的像素宽度。宽度可以围绕几个值动态设置。
metric:是否显示十进制比例线。
imperial:是否显示公制比例线。
updateWhenIdle:如果设置为true,控制由moveend更新,否则它总是最新的(由move更新)。
Events methods
一系列事件驱动的类(比如map)之间共享的方法。通常,事件允许你在一个对象发生某些事情时执行一些函数。
leaflet通过引用来处理事件监听器,所以如果你想咬添加或移除一个监听器时,可以用函数的方法。
Methods(方法)
addEventListener(类型,函数,内容):向某一类型的事件中添加监听器函数。你可以选择性地指定监听器的内容(对象中this关键字会被使用)。你也可以传递几个空格间隔的类型(如&click dbclick&)。
addEventListener(发生事件的地图,内容):添加一系列的类型/监听器对,如{click:Onclick,mousenove:onMouseMove}
removeEventListener(类型,函数,内容):移除之前添加的监听器函数。如果没有指定具体的函数,则所以的都会被移除。
removeEventListener(发生事件的地图,内容):移除一系列类型/监听器对。
hasEventListener():如果某一事件类型有附属的监听器则返回true。
fireEvent():触发指定类型的事件。你可以提供一个数据对象——监听器对象的第一个参数应该包含它的属性。
on():addEventListener的别称。
off():removeEventListener的别称。
fire():fireEvent()的别称。
Event objects
当一些事件触发时接受监听器函数参数的事件对象,它包含了事件一些有用的信息。
Events(事件)
type:事件的类型。
target:触发事件的对象。
MouseEvent(鼠标事件)
latlng:鼠标事件发生的地理点。
layerPoint:鼠标事件发生的与地图图层相关的点的像素坐标。
containerPoint:鼠标事件发生的与地图容器相关的点的像素坐标。
originalEvent:由浏览器触发的原始的DOM鼠标事件。
LocationEvent(位置事件)
latlng:监测到的用户的地理位置。
bounds:用户坐落的区域的地理边界(考虑位置精度问题)。
accuracy:米为单位的位置的精度。
ErrorEvent(错误事件)
message:错误信息。
code:错误代码(若可用)。
LayerEvent(图层事件)
layer:添加或移除的图层。
TileEvent(切片事件)
tile:切片要素(图片)。
url:切片的url资源。
GeoJSON event(GeoJSON事件)
layer:将要添加到地图上的GeoJSON要素的图层。
properties:要素的GeoJSON的属性。
geometryType:要素的GeoJSON的几何类型。
id:要素的GeoJSON的ID(如果出现)。
Popup event(弹出框事件)
popup:打开或关闭的弹出框。
L.Class强化了leaflet的面向对象的设备并被用于创建几乎所哟这里提到的leaflet类。
除了执行一个简单的类接口模型,它还引入了方便代码组织的一下特殊的属性——options,includes和statics。
Inheritance(继承)
可以用L.Class.extend来定义新的类,但可以在任何一个类上用同样的方法来继承它。
这会创建一个继承父类所有方法和属性的类(由规范所约束),添加或重构你用来扩展的类。这也对instanceof做出反应。
你可以通过父类的规范和javascript的call与apply来调用父类的方法来响应子类的方法(就像你在其他语言中调用超类)。
Options(选项)
options是一个与其他对象不同的特殊的属性,其他你用来扩展的对象会被父类合并而非完全重构,这使管理对象的结构和默认值更加方便。
选项中还有L.Util.setOptions方法,可以方便地合并传递给函数构造器的选项和类中默认的定义。
Includes(包含)
includes是一个特殊的类,它将所有对象合并到一个类中。一个较好的例子是L.Mixin.Event,它是具有on、off和fire这些鱼事件相关的方法的类。
Statics(静态)
statics是一种方便的属性,将类中指定对象的属性变为静态属性,对于定义常量比较有用。
Class Factories(类工厂)
你可以用个两种方式来创建leaflet的实例——用new关键字和用小写的factory方法。
Constructor Hooks(构造函数钩子)
如果你是一个插件开发者,你通常需要在现有的类中加入附件的初始化代码(比如因L.Polyline而编辑钩子)。leaflet可以用addInitHook方法来简化它。
leaflet内部监测浏览器或要素的带有属性的命名空间。
ie:如果是IE浏览器则返回true。
ie6:如果是IE6浏览器则返回true。
ie7:如果是IE7浏览器则返回true。
webkit:如果是类似chrome和safari的基于webkit的浏览器(包括移动版)则返回true。
webkit3d:如果基于webkit的浏览器支持CSS的3D转换则返回true。
android:如果是安卓移动版的浏览器则返回true。
android23:如果是安卓2或3的股票浏览器则返回true。
mobile:如果是流行的移动版的浏览器(包括iOS下的safari和其他各种安卓浏览器)则返回true。
mobileWebkit:如果是移动版的基于webkit的浏览器则返回true。
mobileOpera:如果是移动版的opera浏览器则返回true。
touch:对于所有触摸设备上的浏览器返回true。
msTouch:对于微软的触摸模式的浏览器(比如IE10)返回true。
retina:如果是视网膜屏幕的设备则返回true。
在leaflet内部使用的多种实用的函数。
Methods(方法)
extend():将src对象(或多个对象)的属性合并到dest对象中并将其返回。具有一个L.extend的快捷方式。
bind():返回由给定范围的obj执行fn函数的函数(所以关键字this可以表示函数代码里的obj)。具有一个L.bind快捷方式。
stamp():在对象上应用一个主键并返回这个键。具有L.stamp快捷方式。
limitExecByInterval():返回调用尽量快的但不会比间隔时间还要频繁的fn函数的包装器(对于拖动地图时检验和请求信的切片比较有用),可以通过context选择函数调用的范围。
falseFn():返回总是返回false的函数。
formatNum():返回digits位数的num的数目。
splitWords():根据空格和空白来截取分割字符串并返回数组。
setOptions():将所给的属性合并到obj的options中,返回最终的选项。参加Class options。具有L.setOptions快捷方式。
getParamString():将对象转换为带有参数的URL字符串,比如{a:&foo&,b:&bar&}转换为'?a=foo&b=bar'。
template():是一个简单的模板,用通过将{a:'foo',b:'bar',...}形式的data对象应用到'Hello{a},{b}'形式的模板字符串来创建字符串——在上述示例中可以得到'Hello foo,bar'。
isArray():如果对象为数组则返回true。
Properties(属性)
emptyImageUrl:包含64位编码的空的GIF图像的数据URL字符串。在webkit驱动的移动设备的上,用来作为清空没用图像的存储的钩子。
L.Transformation
表示仿射变换:用一系列a、b、c、d的系数来将(x,y)形式转换为(ax+b,cy+d)的形式并进行反转。在leaflet的投影代码中可以用得到。
Constructor(函数构造器)
L.Transformation():通过给定的系数创建转换对象。
Methods(方法)
transform():返回转换后的点,可以选择扩大一定的倍数。只接受真实的L.Point实例,而不是数组。
untransform():返回反转变换后的点,可以选择搜索一定倍数。只接受真实的L.Point实例,而不是数组。
L.LineUtil
一些处理线段点的应用函数,在leaflet内部用来使线段显示更快。
Methods(方法)
simplify(): 在保持形状的同时动态地减少线上点的数目并返回简化后点的数组。在每一缩放级别处理和显示leaflet线段时可以大幅提升效率并可以减少视觉噪声。 tolerance影像简化的量(较小的值意味着更高的质量,但效率会地因为有更多的点)。这也是微型类库Simplify.js中的一部分。
pointToSegmentDistance():返回点p到p1和p2组成的线段之间的距离。
closesPointOnSegment():返回p1和p2线段上与p点最接近的点。
clipSegment():用矩形边界裁剪点a到点b之间的折线段(直接修改折线段上的点)。在leaflet中用来显示屏幕内或边缘的线段上的点,可以因此而提高效率。
L.PolyUtil
多边形几何体的一些应用函数。
Methods(方法)
clipPolygon():通过矩形边界来裁剪给定点定义的多边形几何体。在leaflet中用来显示屏幕内或边缘的线段上的多边形上的点,可以因此而提高效率。多边形点需要不同的算法来裁剪折线段,因此这个方法也有不同的分支。
L.DomEvent
在leaflet内部用来处理DOM事件的应用函数。
Methods(方法)
addListener():向指定类型的DOM事件元素添加监听器fn。监听器中的this关键字指向context,或是在没有说明的情况下指向要素。
removeListener():在元素中移除事件监听器。
stopPropagation():停止事件向父元素传播。
preventDefault():阻止事件默认的动作发生(比如追踪元素href中的链接,或是当form提交时页面重载的POST请求)。
stop():在同一时刻发起stopPropagation和preventDefault。
disableClickPropagation():将stopPropagation添加到元素的'click','doubleclick','mousedown'和'touchstart'事件中。
getMousePosition():如果没有特意说明则获取与容器或整个页面相关的DOM事件的标准的鼠标位置。
getWheelDelta():从mousewheel的DOM事件中获取标准的滚轮区域。
在leaflet内部用来处理DOM树的应用函数。
Methods(方法)
get():如果传递字符串则返回一个带有指定id的元素,或是只是返回这个元素。
getStyle():返回元素中特定样式属性的值,包括计算后的值和CSS中设置的值。
getViewprotOffset():返回请求元素视图的偏移量。
create():通过tagName创建元素,设置className并选择性地将其附加到container元素中。
disableTextSelection():使文本不能被选择,比如拖动的时候。
enableTextSelection():使文本选择重新可用。
hasClass():如果元素类属性包含name则返回true。
addClass():将name添加到元素类的属性中。
removeClass():在元素类属性中移除name。
setOpacity():设置元素的透明度(包括老的IE也支持)。值应当处于0到1之间。
testProp():检索样式名称的数组并返回第一个元素可用样式的名称。如果没有找到,那么返回false。
getTranslateString():返回CSS转换字符串来通过给定点提供的偏移量来移动元素。
getScaleString():返回CSS转换字符串来缩放元素(通过给定的比例原点)。
setPosition():用CSS转换或屏幕左上角位置设置给定点的坐标系下的元素位置(leaflet内在地定位图层)。如果disable3D设置为true那么强制为左上角位置。
getPosition():返回之前用setPosition定位的元素的坐标。
Properties(属性)
TRANSITION:带前缀的转换样式名称(如'webkitTransition'用来表示WebKit)。
TRANSFORM:带前缀的变换样式名称。
L.PosAnimation
&在内部用来平移动画镜头,利用CSS3转换在现代浏览器中实现,在IE6到9中用时间降速的功能实现。
Constructor(函数构造器)
L.PosAnimation():创建动画对象。
Methods(方法)
run():在新的位置运行指定元素,可以选择性地设置持续的秒数(默认是0.25秒)和线性效果(通过cubic bezier curve的第三个参数,默认是0.5)。
Events(事件)
start:当动画开始时触发。
step:在动画过程中持续触发。
end:动画结束时触发。
L.Draggable
使DOM元素可以拖动的类。在内部被用来拖动地图和注记。
Constructor(函数构造器)
L.Draggable():创建可拖动对象,这样在你开始移动dragHandle元素时就可以移动给定元素了(默认同元素自身是同一个)。
Events(事件)
dragstart:拖动开始时触发。
predrag:在拖动过程中相应元素位置更新之前持续触发。
drag:拖动过程中持续触发。
dragend:拖动结束后触发。
Methods(方法)
enable():使拖动功能可用。
disable():使拖动功能不可用。
继承自interaction handlers接口。
enable():使处理程序可用。
disable():使处理程序不可用。
enabled():如果处理程序可用则返回true。
显示地图上附属于某一位置(或一系列位置)的对象。被tile layers,markers,popups,image,overlays,vector layers和layer groups所继承。
Methods(方法)
onAdd():需要包含创建覆盖物的DOM元素的代码,将他们加入到所属的map panes中并在相关地图时间中放入监听器。调用map.addLayer(map)。
onRemove():包含从DOM移除覆盖物元素和移除之前onAdd方法添加的监听器的所有的清除代码。调用map.removeLayer(layer)。
Implementing Custom Layers(实例化自定义图层)
何时实例化自定义图层最重要的是地图的viewset事件和latLngToLayerPoint方法。viewset在地图需要重新定位图层时(比如缩放时)触发,latLngToLayerPoint在获取图层新的位置时使用。
在实例化图层时还有一个经常用到的事件是moveend,在地图移动之后触发(比如平移和缩放等)。
还 有一个需要注意的事情是你需要经常向你在图层中创建的DOM元素中添加leaflet-zoom-hide类,它会在缩放动画中隐藏。实例化自定义图层的 缩放动画师一个复杂的话题,在以后的章节中会讲到,但你可以在leaflet的图层代码(比如ImageOverlay)中看一下它是如何工作的。
在地图的某个角上显示UI元素。被zoom,attribution,scale和layers controls所继承。
Methods(方法)
onAdd():包含所有用于在相关地图事件上控制、添加监听器的创建必要DOM要素的代码,并返回包含控制的元素。调用map.addControl(control)或control.addTo(map)。
onRemove():包含所有清除代码(比如0移除控制事件监听器)。调用map.removeControl(control)或control.removeFrom(map)。控制的DOM容器自动移除。
IProjection
具有将地理坐标投影到平面(和后方)的方法的对象。参加Map projection。
Methods(方法)
project():将地理坐标投影为二维点。
unproject():将二维的点反投影为地理位置。
Defined Projections(定义的投影)
L.Projection.SphericalMercator:球面墨卡托投影——网上地图最常用的投影,几乎所有的免费和商业的切片提供者都会使用。假设地球是一个规则球体。被EPSG:3857坐标参考系统使用。
L.Projection.Mercator:椭圆墨卡托投影——比球面墨卡托投影更为复杂,这个投影考虑到地球是椭球而非规则球体。在EPSG:3395坐标参考系统中使用。
L.Projection.LonLat:正交矩形或圆柱投影——最简单的投影,几乎只被GIS专家使用。将地图的x方向作为经度,y方向作为纬度。对于平面的世界也适用,比如游戏地图。在EPSG:3395和Simple坐标参考系统中使用。
为将地理点投影到像素坐标或屏幕坐标和反向投影(投影到用于WMS服务的其他单位的坐标)而定义坐标参考系统。参加Spatial reference system。
Methods(方法)
latLngToPoint():将给定缩放级别的地理坐标投影为像素坐标。
pointToLatLng():是latLngToPoint的反转。将给定缩放级别的像素坐标投影为地理坐标。
project():将地理坐标投影为CRS可接受单位的坐标(比如EPSG:3857中的米,传递给WMS服务)。
scale():返回转换投影坐标为特定级别的像素坐标所用到的缩放级别。比如,在基于墨卡托投影的CRS中返回256*2^zoom。
Properties(属性)
projection:CRS使用的投影。
transformation:CRS使用的用来将投影坐标转换为特定切片服务的屏幕坐标的转换方式。
code:向WMS服务传递的标准CRS的标准代码名称(比如'EPSG:3857')。
Defined CRS(定义的坐标参考系统)
L.CRS.EPSG3857:在线地图最常用的CRS,几乎所有的免费喝商业切片服务都会使用。使用球面墨卡托投影。是地图的crs选项的开始默认值。
L.CRS.EPSG4326:在GIS专家中常见的CRS。使用简单的圆柱投影。
L.CRS.EPSG3395:较少地被商业切片服务使用。使用椭圆墨卡托投影。
L.CR.Simple:直接将经纬和纬度映射为x和y的简单的CRS。可能会在平面地图中用到(比如游戏地图)。y轴始终是反向的(由下而上)。
如果你想用其他此处未列出的不常用的CRS,请查询Proj4Leaflet插件。
Global Switches
用来在少数情况并且基本都是即使某个特别的浏览器要素存在,也使leaflet不监测的全局设置开关。需要在leaflet包含于页面之前将全局变量开关设置为true。
L_PREFER_CANVAS:对于矢量图层,强制leaflet在后台使用画布而非SVG。这在某些情况下可以适当提高性能(比如在地图上有成千上万的圆注记时)。
L_NO_TOUCH:即使监测到触摸事件,也强制leaflet不去使用触摸事件。
L_DISABLE_3D:即使可用,也强制leaflet在定位时不使用硬件加速来进行CSS 3D变换(在少数情况下会发生偶然故障)。
L.noConflict()
这个方法用来将L全局变量恢复到leaflet包含的初始值,并返回leaflet真实的命名空间,所以你可以将它放到任何地方。
显示当前使用的leaflet版本的常量。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:51093次
排名:千里之外
转载:21篇
(2)(1)(3)(1)(2)(2)(2)(1)(1)(2)(6)leaflet 1.1.0 - 推酷
leaflet 1.1.0
Leaflet 1.1.0 is now available on CRAN! The
is a tidy wrapper for the
mapping library, and makes it incredibly easy to generate interactive maps&based on spatial data you have in R.
This release was nearly a year in the making, and includes many important new features.
Easily add textual
on markers, polygons, etc., either on hover or statically
polygons, lines, circles, and rectangles on hover
Markers can now be
with a variety of colors and icons, via integration with
Built-in&support for many types of objects from
, a new way of representing spatial data in R (all basic sf / sfc / sfg types except MULTIPOINT &and GEOMETRYCOLLECTION are directly supported)
Projections other than Web Mercator are
Color palette functions now native use &viridis& , &magma& , &inferno& , or &plasma& as the palette argument
Discrete color palette functions ( colorBin , colorQuantile , and colorFactor ) work much better with
Integration with
Data with NA points or zero rows no longer causes errors
Support for linked brushing and filtering, via&
(more about this to come in another blog post)
Many thanks to
who contributed much of the code for&this release.
Going forward, our intention is to prevent&any more Leaflet.js plugins from accreting in the core leaflet package. Instead, we have made it possible to write 3rd party R packages that extend leaflet (though the process to do this is not documented yet). In the meantime, Bhaskar has started develop it&already supports several&plugins, for everything from animated markers to heatmaps.
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致[转载]PROJ4初探(转)
Proj4是一个免费的GIS工具,软件还称不上。它专注于地图投影的表达,以及转换。采用一种非常简单明了的投影表达--PROJ4,比其它的投影定义简单,但很明显。很容易就能看到各种地理坐标系和地图投影的参数,同时它强大的投影转换功能,也是非常吸引人的。许多的
GIS软件中也将其集成在内。Proj可以在 window的命令下有可运行的
EXE文件,其实它更主要的是一个库!可以用来编一些批处理。在
Linux下除了可以直接运行外,还可以作为库来进行更高功能的开发。
Window下安装:
从的网站下载安装文件,解压缩,把路径加到环境变量里即可。具体操作步骤在解压后的README有详细说明。
Ubuntu Linux下安装: 可以在终端输入:
sudo apt -get install proj
Fedora Linux 下安装: 可以在终端输入:
su -c 'yum install proj'
在终端或 DOSshell下可以输入(带$的为向终端里输入的命令):
Rel. 4.6.0, 21 Dec 2007
usage: proj [-beEfiIlormsStTvVwW [args]] [+opts[=arg]] [files]
会显示出 proj的用法。包括参数设置,可选项,和输入文件。
对于作地图和 GIS工作者来说投影可谓是一切的基础,投影的正确与否将关第到最终结果正确与否。在 proj里边集成了,许多的制作地图用的投影参数。我们可以使用下边的命令来显示在 proj里的内置的有关地图投影的参数。显示投影类型:
aea: Albers Equal Area
aeqd: Azimuthal Equidistant
... ... ...
wag5: Wagner V
wag6: Wagner VI
wag7: Wagner VII
weren: Werenskiold I
wink1: Winkel I
wink2: Winkel II
wintri: Winkel Tripel
同样的,还有命令:
$proj -le
显示支持的椭球体(ellipsoid)信息,显示结果省略。
$proj -ld
显示Proj4支持的基准面(Datum)信息,显示结果省略。
这两个概念是有区别的。学过地图学的都知道,地图学上对地球上的抽象,第一次抽象为水准面(等重力面),第二次抽象为椭球体(ellipsoid),第三次抽象现在我认为是将椭球体进行定位之后,所确定的具有明确的方向的椭球体,它的要求能够很好的为当地区的地图制作服务,这个似乎才可称为基准面(Datum)。当输入:
$ proj -ld
__datum_id__ __ellipse___
__definition/comments______________________________
WGS84 WGS84
towgs84=0,0,0
GGRS87 GRS80
towgs84=-199.87,74.79,246.62
Greek_Geodetic_Reference_System_1987
NAD83 GRS80
towgs84=0,0,0
North_American_Datum_1983
NAD27 clrk66
nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat
上边显示的就是基准面和椭球体的差异。
我国常用的地图投影主要有,Albers,Lambert,Gauss-Kruger,UTM投影。
等积投影由于没有面积变形,所以在土地调查,植被盖度分类等涉及到要保持面积不能变形的情况.中国的全国性地图许多采用等积投影。国际上称为Albers投影,是一种圆锥等积投影。中国所使用的 Albers的参数是双标准纬线,25N,47N,中央经线为 105E,椭球体为Krassovsky。用proj4表示为:
+proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47
下边将用中国的 Albers投影,简称为 Albers_China来作个简单的投影转换。
$proj +proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47
104d36'54 36d25'9
104d25'36.9E 36d52'41N
也可以进行批量转:
$ proj +proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47 &&EOF
同样也可以进行反转,即将 Albers转为经纬度,只要在命令中加入参数-I
$ proj +proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47 -I &&e
& -8312.80
在这里转换的过程中始终是按经度-纬度,x-y的顺序放进的。你也许会想将它们的方向掉转。如果是输入时想转可在命令中加 -r,如果是输出想掉转,可以是加 -s
$ proj +proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47 -r -s
同样也可以通过文件来进行批量转换:
lat_lon.test
105dE 36dN
104dE 36dN
106dE 24dN
$ proj +proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47 ~/lat_lon.test &alberst.test
生成的:alberst.test
你也可以在文件中加注释和对坐标点的说明,在转换后仍可以保留:
lat_lon.test
#it's just a test for convert file format
105dE 36dN not Lanzhou
104dE 36dN Lanzhou
106dE 24dN Unknow place
$ proj +proj=aea +ellps=krass +lon_0=105 +lat_1=25
+lat_2=47 ~/lat_lon.test &albers.test
albers.test
#it's just a test for convert file format
not Lanzhou
-8312.80 Lanzhou
Unknow place
在命令上边的~/lat_lon.test是输入的文件~在 linux下指的是当前目录,windows下没试过,不过可以用绝对路径。&是重定向,输出文件。
proj4支持许多单位,可以通过 proj -lu,看到支持的单位:
$ proj -lu
Centimeter
Millimeter
kmi 1852.0
International Nautical Mile
其中 proj默认的单位为米(meter),我们设置参数 +units 来控制输入的坐标单位。我们可以将它的输入或输出的数据的单位改为其它:
$ proj +proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47 +units=km -I &&e
& -88..31280
& 102..93426
地图投影设置
其实在上边我们已经用到了一些参数。比如进行投影的反转,所使的是-I。还有就是给出的中国等积投影是:
proj +proj=aea +ellps=krass
+lon_0=105 +lat_1=25
其中有许多参数前边都加了前缀 + ,这后边的参数是对地图投影的真正的设置,proj命令也将按这个规定来进行转换。这种的参数的形式是 +param=value 为 param(参数)来给定一个value(值),这个值可以是一个以度分秒格式或实数,整数,甚至可以是一个ASCII字符串。所要注意的是一种拼错了的参数名会被不理会,如果一个参数输入了两次,则第一次输入的将被使用。所以在执行前要将参数检查好。另一个很有用的特点是,proj会自动决定中央经线并且追加一个+lon_0参数到你的定义中,如果你没有定义中央经线的话。
选择投影使用的参数是+proj=name。proj中集成了不少的投影而且还在不断的增加。可惜的对我们中国的并没增加多少!它在这里提供我们增加我们自己投影的方法。我们可以用命令:
$proj -l #得到内置的投影类型
aea&: Albers Equal Area #可以看到 Albers等积投影的在 proj中的值是 aea
$proj -lP #得到更详细的投影信息,投影包含的参数。
aea&: Albers Equal Area
#更详细的信息
Conic Sph&Ell
lat_1= lat_2=
这样我们就可以来定你想要的投影了。
选择椭球体
虽然投影定了,可是还要确定椭球体。有两种办法:一种是利用内置的一些椭球体。
$proj -le #显示出内置的椭球体。
找几个我国经常用的椭球体:
Clarke 1866
Krassovsky, 1942
rf=298. WGS 84
另一种就是你可以自定义一个你自己的地球,在上边的三个椭球体上就包含了定义一个椭球体的参数。以下面是这几个参数的含义:必须有的:
椭球的赤道半径(半长轴)
下边的这些只要一个就行的参数:
椭球的极半径(半短轴)
椭球的扁率
F=(A-B)/A
椭球的反扁率
偏心率的平方
例如指定一个 Clark1866 椭球来作为中国等积投影的参数就可以这样来设置:
$proj +proj=aea +ellps=clrk66 +lon_0=105 +lat_1=25
#可以和上边的 krass椭球体比较
同样也可以自定义:
$ proj +proj=aea +a= +es=. +lon_0=105 +lat_1=25
$ proj +proj=aea +a= b= +lon_0=105 +lat_1=25
得到结果都是一样的。如果你仅仅只指定了一个+a则会得到一个正规的球体。例如:
你会定义一个半径 R=1的单位球体。
通用的参数
我们知道 UTM投影,为确保每个带中的点全为正,在北半球将坐标从每带的中央径线西移 500公里。而南半球为了保证 Y轴为正,不得不还向南移。这样两个参数在 proj中可以用两个参数+x_0和+y_0来确定。例如在UTM中,
+x_0=5000000 +y_0=0
还有一个是+lat_0:不太清楚,把原文贴过来。
A fourth parameter, lat_0= 0, is used to designate a φcentral parallel and associated y axis origin for several projections.
还有最后一个+lon_0:指中央径线,在 UTM还有 Albers中要设置。上边的四个参数是可选的如果没有将会默认为 0,除+lon_0,它会计算。这样我们就完成了一个投影的完整定义了,至少我认为这是一种很很简单很优美的定义投影的方式。通常把这种 proj定义出的投影形式称为 PROJ4格式,例如刚开始写的中国的等积投影:
+proj=aea +ellps=krass +lon_0=105 +lat_1=25
还有中国的 Lambert投影,写法和上边差不多,在 proj4里的投影名称叫+proj=lcc
定义一个 UTM 投影的方法
$proj +proj=utm +zone=48
#在离兰州最近的一条中央经线
#可以看出西移 500000米
定义一个高斯克吕格(它是横轴墨卡托的一种,也是横轴黑卡托的默认值)
$proj +proj=tmerc +lon_0=105
#这上边没带,可以简单的算出每个带的中央经线的度数:(带数*6)-3就是中央经线
自定义你的 proj 及内置的其它程序介绍
自定义你的参数
也许我们或许希望将我们常用的地图投影的定义放到文件中,我们只要在需要时将其导入即可。Proj4也提供了这个功能。我们以设置+init参数来进行。 首先先将地图投影保存到文件中。我们保存地图投影的文件格式如下: proj.dat
中国全国范围内的Albers投影
&albers_china& +proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47 &&
上边我们将中国的等积投影保存在名为 proj.dat的文件中。作为这个放置投影的文件的格式是:#表示注释,proj不执行 &...&夹在这里边的是关键字,因为在一个投影文件中可以放多个投影, proj在这个文件里靠关键字来选择投影。&& 最的这个表示投影定义的结束。中间的部分就表示为定义的投影了。这样我们就可以很简单的使用+init来使用我们定义的这个投影了!
$ proj +init=~/proj.dat:albers_china
+init后边是个等号,之后是你保存投影文件的绝对路径,之后是个冒号,冒号之后则是投影的关键字。由于我是在 LINUX
号代表的是当前目录。在 Windows下则要改为类似于:
+init=c:proj.dat:albers_china
其实在 proj初使时它已经有一些默认的值了,比如椭球体默认为 WGS84。如果要更改这些。可以参考后边所列的参考书。
proj4 里的其它程序
其实在你安装完 proj4之后,不光只安装了个 proj程序,还包括其它的几个,以及一个 lib。先介绍其内置的几个其它函数。
invproj 反转,将 xy转换为 lonlat。相当于 proj -I
cs2cs 是从一个投影转到另一个投影,具体的使用方法是:
$ cs2cs +init=~/proj.dat:albers_china +to +proj=utm +zone=48 +ellps=krass
+to 前一你输入的坐标所属的投影,后边是要转出的投影。这就解决了,如果要用 proj在两个坐标系间转,必须要先转为经纬度。其它的参数可以参照proj的设置。
nad2nad 这是他们给他们自己国家的两个基准面进行基准面转换所作的。
转个原文吧,不知道我们什么时候用上自己的基准面转换,从 54转 80。。
to convert data between North America
American Datum 1983.
nad2nad can option-ally process both State Plane Coordinate
Universal Transverse Mercator (UTM) grid data as well as geographic
input and output.
This can also be accomplished with the cs2cs program.
这是个很有意思的,在定义了椭球体之后可以求出地表任意两点的大圆距离,以及两点的相对方位。当然也可以有它的反函数,invgeod。其使用方法,可以看帮助,一目了然。
Proj 的参数全解
下边将 Proj程序进行一个小的总结,对它所包含的所有参数进行说明。投影变换的命令为:
proj [-control] [+control] [files]
在 unix,Linux上还包括一个反变换:
invproj [files]
代表输入的数据文件,执行顺序是从左向右,如里这里为空的话,则程序默认是从标准输入设备中输入,即键盘。 [-control] 参数被用来制约控制,数据的输入输出,和选择要计算的基本信息。下边将每个 -control 参数进行说明。
-I 进行投影的反转换。在上边说到的 unix下的有反转程序
invproj在windows下只要加上它,就可以进行反转。从投影坐标转为地理坐标。
-l[p|P|e|u|d] 显示出 proj内置的一些地球参数。
-lp显示投影。-lP显示投影里的参数比较详细。
-le显示内置的椭球体,看完之后,基本上够用的。
-lu显示 proj支持的长度单位。
-ld显示基准面,很少基本上都是美国的,也只有 WGS84我们现在用的比较多。
-b 用来把从标准输入输出中的数据当做二进制。输入数据被认为是双精度浮点。当
proj作为一个子程序时非常有用,可以忽略格式操作。
-i 仅选择输入为二进制,参考(-b)
-o 仅选择输出为二进制,参考(-b)
-ta 指定一个字符来作为注释来不被执行,仅只能使用 ASCII
字符。(默认为#号,例如可以改为-t%,这就将%作为注释符)
-e string 来作为当输出错误时输出的信息。注意 -e 空一格,之后再输入你想要达到的输出时输出的信息。默认的错误输出是
*t*。所要注意的是如果选了-b,-o,-i的话,错误的消息将被使用系统的 HUGE VAL 输出。
这个用来反转输入坐标的顺序,如果使用的话会将输入默认的longtitude-latitude或者x-y改变为latitude-lontitude
-s 将输出的顺序进行反转。参考 -r
-m 是指将输出的值按比例进行缩小放,主要用来用来进行单位转换,因为proj
默认的输出单位是米,如果你想输出为千米时就可以用它来指定。例如:-m 1:1000 或使用 -m 1/1000
都是可以的。也可将其放大使用 -m 1:0.1 显示为分米为最小单位。
来对输出进行精度规范,输出的小数点精度。默认的格式为%.2f,即输出两位小数。对于经纬度则采用十进制来表示。例如:将输出的小点数位保留五位,-f%.5f。
-[w|W]n 用来控制当使用度分秒格式时,秒的位数。n 是个小于10的数。
-wn 指保留的秒的精度是n位,如果在某一位后全为0时就不输出。
-Wn 则强制将后边的0补上,要求小数位为一个定长。这个有时很有用,在规定格式方面。
-v 来显示你的选择的投影的信息
-V 来显示更详细的你选择投影的信息,增加了椭球体。主要用来检查你的输入是否是你想定义的投影,保证没有错误。
来把每一点在投影后的各种变形显示出来。将这些信息显示在&&里。分别包括
h,k,s,omega,a 和 b。
[+control] 有加号的地图参数都和地图的投影有关,并且不同的投影对其中的有些参数不包括。除了+init 外,其它的带+号的参数都可以作为初始文件中,或默认的文件。这些选择是从按从左到右的顺序进行处理的。当出现重复时,以前边的参数为准。
+proj=name 这是经常必选的一个地图投影转换函数。Name 是一个投影名称。
+init=file:key 名为 file 的文件使用 key 关键字,选择包含了控制参数的投影。
+R=R 当把地球当成球体计算时,所要设置的半径。
+ellps=acronym 选择一个 proj 里的椭球体。Acronym 为椭球体名。
+a=a 设置椭球体的半长轴为a,单位为米
+es=e^2 设置椭球体的偏心度的平方。同样的也可以用+b=b,+e=e,
+rf=1/f,+f=f。来设置,椭球体参数。可以参考上边的说明。
+x_0=x0 设置假东,例如在gauss-kruge 中,东偏 5000000 米。主要用来保持坐标的非负。
+y_0=y0 设置假北,主要用来保持坐标非负。
+lon_0=c 高置中央经线。通常和+lat_0,一起决定投影的地理起点。
+lat_0=d 参考上边的。
+units=name 设置地图坐标的单位。
+geoc 地理坐标将被认为是地心坐标,当使用这个参数的时候。
+over 使用该参数时,把经纬不限制在-180~+180 间。
$ proj +proj=goode
#当不使用时,会自动将经度换到范围
$ proj +proj=goode
#使用关键字时,则不会转换。
在安装Proj4的位置,有一个默认的文件夹,来指示不满足要求的初始化文件名称,以及投影的默认文件proj_def.dat。环境变量 PROJ_LIB 可以用来给出另一个新的文件夹。
在Python里使用的Proj4
proj不光是一些应用程序的集合,它更是一个库,其它语言可以来调用它,来进行更高级的开发和应用。在 proj安装上之后,它本身作为库,可以被 CC++来调用。而 proj本身是一个开源的项目,同时 Python也是一个开源的编程语言。Proj理所应当的能够用在 Python里。在 Python里的 Proj库称为 Pyproj。在 windows和 Linux下都很好安装。现在 Pyproj的所需的python版本为 2.5。pyproj可从: 下载。
Pyporj是 Python下的 proj。可以很方便的对点来进行地图投影转换。同时在它的基础上开发出更高级的应用。Pyproj包里包括两个类,Proj类和Geod类。
Proj类相当于前面所说的 proj的功能。可以进行地图投影的变换从经纬度转为 xy投影坐标,也可以反转。也可以在不同的地图投影之间转换。Geod类相当于前边介绍的 proj里的一个应用程序 Geod。可以很方便的计算地球上任意两点的大圆距离,以及它们的相对方位。同时,也可根据方位和大圆距离来反算出另一点的经纬度。其处理的输入坐标可以是 python数组,list元组,scalar 或者 numpy/Numeric/numarray arrays。在导入 Pyproj后可以用其内部的函数 test()会运行一些例子。下边介绍 Proj类和 Geod类,以及 transform函数。
Proj类主要是进行经纬度与地图投影坐标转换,以及反转。可以参考前边对 proj的介绍。当初始化一个 Proj类的时例时,地图投影的参数设置可以用关键字值的形式。关键字和值的形式也可以用字典,或关键字参数,或者一个 proj4 字符串(与 proj的命令兼容)。当调用一个包含经纬度的 Proj类的实例时,将会把十进制的经纬度,转换成为地图的 xy坐标。如果可选的关键字'inverse'等于 True的时候(默认为假),则进行相反的转换。如果关键字'radians'为 True的话(默认为假),则经纬度的单位则是弧度,而不是度。如果可选的关键字'errcheck' 为真的话(默认为假),一个异常将会被给出,如果转换无效的话。如果为假的话,且转换无效时,没有异常抛出,但会返会一个无效值 1.e30。
可以将经纬度分别存入一个 list或 array。可以进行更高效率的转换。输入的值应当是双精度(如果输入的不是,它们将会被转为双精度)。
虽然 Proj可以和 numpy and regular python array objects,python sequences and scalars,但是用 array 对象速度快一些。
初始化一个投影: Proj4投影控制参数或者是以字典形式给出,或者是以关键字参数给出,也可以用 proj4的形式给出字符串。例:
&&& from pyproj import Proj
#从 pyproj导入 Proj类
&&& p=Proj('+proj=aea +lon_0=105 +lat_1=25 +lat_2=47 +ellps=krass') #初使化一个投影-中国等积投影,使用 proj4格式
&&& x,y=p(105,36)
#进行转换
&&& print '%.3f,%.3f'&%(x,y) #按格式输出
&&& lon,lat=p(x,y,inverse=True)
#进行投影反转
&&& print '%.3,%.3'&%(lon,lat)
#xy为上边转的数值
&&& print '%.3f,%.3f'&%(lon,lat)
105.000,36.000
&&& import math
#验证关键字 radians
&&& x,y=p(math.radians(105),math.radians(36),radians=True)
&&& print '%.3f,%.3f'&%(x,y)
&&& lons=(105,106,104)
&&& lats=(36,35,34)
&&& x,y=p(lons,lats)
#将经纬度放入元组中
&&& print '%.3f,%.3f,%.3f'&%x
#普通打印
&&& print '%.3f,%.3f,%.3f'&%y
&&& type(x)
#输出的类型为元组
&type 'tuple'&
&&& zip(x,y)
用 zip函数包装
[(-1.7281),
&&& utm=Proj(proj='utm',zone=48,ellps='WGS84')
&&& x,y=utm(105,36)
#用关键字定义一个投影。
两个 Proj实例的函数:
is_geocent(self) 返回 True当投影为 geocentric (x/y) coordinates。
is_latlong(self) 返回 True当为地理坐标系经纬度时。
&&& utm.is_geocent() #很纳闷,看来有必要弄清什么是 geocentric
&&& utm.is_latlong()
&&& latlong=Proj('+proj=latlong')
&&& latlong.is_latlong()
&&& latlong.is_geocent()
transform()函数
transform()函数是在 pyproj库下,可以进行两个不同投影的转换。相当于 proj程序里的 cs2cs子程序。用法如下:
transform(p1, p2, x, y, z=None, radians=False)
x2, y2, z2 = transform(p1, p2, x1, y1, z1, radians=False)
在 p1,p2两个投影间进行投影转换。将把在 p1坐标系下的点(x1,y1,z1)转换到 p2所定义的投影中去。z1是可选的,如果没有设 z1的话将会假定为 0,并仅仅返回 x2,y2。使用这个函数的时候要注意不要进行基准面的变换(datum)。关键字radians只有在 p1,p2中有一个为地理坐标系时才起作用,并且把是地理坐标系的投影的值会当作弧度。判断是否为地理坐标可以用 p1.is_latlong() 和 p2.is_latlong()函数。 输入的 x,y,z可以是分别是数组或序列的某一种形式。举例:
&&& import pyproj
&&& albers=Proj('+proj=aea +lon_0=105 +lat_1=25 +lat_2=47 +ellps=krass')
&&& utm=Proj(proj='utm',zone=48,ellps='krass')
&&& albers_x,albers_y=albers(105,36)
&&& albers_x,albers_y (-1.7281)
&&& utm_x,utm_y=utm(105,36)
&&& utm_x,utm_y
#下边直接从 albers转为 utm坐标
&&&to_utm_x,to_utm_y=pyproj.transform(albers,utm,albers_x ,albers_y)
&&& to_utm_x,to_utm_y
主要用来求算地球大圆两点间的距离,及其相对方位,以及相反的操作。同时也可以在两点间插入 N等分点。
该类主要包括三个函数:
fwd(self,lons,lats,az,dist,radians=False)
参数为经度,纬度,相对方位,距离。
正转换,返回经纬度,以及 back azimuths。可以用 numpy and regular python array
objects, python
sequences and scalars。如果 radians为真把输入的经纬度单位当作弧度,而不是度。距离单位为米。
inv(self, lons1, lats1, lons2, lats2, radians=False)
反变换,已知两点经纬度,返回其前方位解,后方位角,以及距离。
npts(self, lon1, lat1, lon2, lat2, npts, radians=False)
给出一个始点(lon1,lat1)和终点(lon2,lat2)以及等份点数目 npts。举例(懒得写了,照抄过来,已验证):
&&& from pyproj import Geod
&&& g = Geod(ellps='clrk66') # Use Clarke 1966 ellipsoid.
&&& # specify the lat/lons of Boston and Portland.
&&& boston_lat = 42.+(15./60.); boston_lon = -71.-(7./60.)
&&& portland_lat = 45.+(31./60.); portland_lon = -123.-(41./60.)
&&& # find ten equally spaced points between Boston and Portland.
&&& lonlats = g.npts(boston_lon,boston_lat,portland_lon,portland_lat,10)
&&& for lon,lat in lonlats: print '%6.3f &%7.3f'&% (lat, lon)
初始化一个 Geod类实例:使用关键字方法来传一个椭球体,椭球体为 proj中支持的任何一个。
&&& g=Geod(ellps='krass')
同时也可以指定 a,b,f,rf,e,es来设定地球椭球体。
&&& miniearth=Geod(a=2,b=1.97) #单位为米
这样对于一个确定的实例就可以使用上边的三个函数了。实例(继续照抄过来):
&&& from pyproj import Geod
&&& g = Geod(ellps='clrk66') # Use Clarke 1966 ellipsoid.
&&& # specify the lat/lons of some cities.
&&& boston_lat = 42.+(15./60.); boston_lon = -71.-(7./60.)
&&& portland_lat = 45.+(31./60.); portland_lon = -123.-(41./60.)
&&& newyork_lat = 40.+(47./60.); newyork_lon = -73.-(58./60.)
&&& london_lat = 51.+(32./60.); london_lon = -(5./60.)
&&& # compute forward and back azimuths, plus distance
&&& # between Boston and Portland.
&&& az12,az21,dist = g.inv(boston_lon,boston_lat,portland_lon,portland_lat)
&&& print "%7.3f&%6.3f&.3f"&% (az12,az21,dist) -66.531 75.654
&&& # compute latitude, longitude and back azimuth of Portland,
&&& # given Boston lat/lon, forward azimuth and distance to Portland.
&&& endlon, endlat, backaz = g.fwd(boston_lon,boston_lat, az12, dist)
&&& print "%6.3f &%6.3f&.3f"&% (endlat,endlon,backaz)
&&& # compute the azimuths, distances from New York to several
&&& # cities (pass a list)
&&& lons1 = 3*[newyork_lon]; lats1 = 3*[newyork_lat]
&&& lons2 = [boston_lon, portland_lon, london_lon]
&&& lats2 = [boston_lat, portland_lat, london_lat]
&&& az12,az21,dist = g.inv(lons1,lats1,lons2,lats2)
&&& for faz,baz,d in zip(az12,az21,dist): print "%7.3f&%7.3f&%9.3f"&% (faz,baz,d)
54.663 -123.448
51.254 -71.576
Cartographic Projection Procedures Release 4 Interim
Cartographic Projection Procedures for the UNIX Environment—A
User’s Manual
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 leaflet.js 百度地图 的文章

 

随机推荐