GeoMap编程参考

Map控件的底层控件为GeoMap,我们一般直接针对GeoMap编写代码。

编写代码之前,需要先获得GeoMap控件,例如:

Dim map As GeoMap = e.Form.Controls("Map1").GeoMap

在Map控件本身的代码中,可以这样获取GeoMap控件:


Dim
map As
GeoMap = e.Sender.GeoMap

GeoMap的成员参考:

成员 说明
CreatePlaceMark 方法,基于经纬度数据创建标记。

语法:

CreatePlaceMark(point)
CreatePlaceMark(points)
CreatePlaceMark(pointsString)

point: GeoPoint类型,用于指定标记的经纬度位置。
points: IEnumerable(Of GeoPoint)类型,例如GeoPoint的集合或数组,用于指定标记的多个经纬度位置
pointsString: 字符串型,用于指定标记的经纬度位置,数据用逗号隔开,奇数位置为经度,偶数位置为纬度。

示例一


以下三段代码是等效的:

Dim mark As New VectorPlacemark()
mark.Geometry =
New
GeoPoint(116.4053, 39.905)

Dim gp As New GeoPoint(116.4053, 39.905)
Dim
mark As
VectorPlacemark = map.CreatePlaceMark(gp)

Dim mark As VectorPlacemark = map.CreatePlaceMark("116.4053,39.905")

示例二

以下三段代码是等效的:



Dim cities As New Dictionary(Of String, GeoPoint)
cities.Add(
"北京", New GeoPoint(116.4053, 39.905))
cities.Add(
"上海", New GeoPoint(121.4726, 31.2317))
cities.Add(
"广州", New GeoPoint(113.2806, 23.1252))
Dim
mark As VectorPlacemark
mark = map.CreatePlaceMark(cities.Values)



Dim cities As New Dictionary(Of String, GeoPoint)
cities.Add(
"北京", New GeoPoint(116.4053, 39.905))
cities.Add(
"上海", New GeoPoint(121.4726, 31.2317))
cities.Add(
"广州", New GeoPoint(113.2806, 23.1252))
Dim
mark As VectorPlacemark
mark = map.CreatePlaceMark({cities(
"北京"),  cities("上海"),  cities("广州"
)})



Dim mark As VectorPlacemark
mark = map.CreatePlaceMark(
"116.4053,39.905,121.4726,31.2317,113.2806,23.1252"
)

CreateLine 方法,基于经纬度数据创建线条。

语法:

CreatePlaceMark(points)
CreatePlaceMark(pointss)
CreatePlaceMark(pointsString)

points:IEnumerable(Of GeoPoint)类型,例如GeoPoint的集合或数组,用于指定线条经过的点。
pointss:如果包括多个线段,可以用此参数指定多个IEnumerable(Of GeoPoint)
pointsString:字符串型,用于指定线条经过的点位置,奇数位置为经度,偶数位置为纬度,如果包括多个线段,用vblf或符号"|"隔开

示例一

以下代码是等效的:



Dim
cities As New Dictionary(Of String, GeoPoint)
cities.Add(
"北京", New GeoPoint(116.4053, 39.905))
cities.Add(
"上海", New GeoPoint(121.4726, 31.2317))
cities.Add(
"广州", New GeoPoint(113.2806, 23.1252))
Dim
line As
VectorPolyline = map.CreateLine(cities.Values)



Dim gps() As GeoPoint = {New GeoPoint(116.4053, 39.905), New GeoPoint(121.4726, 31.2317), New GeoPoint(113.2806, 23.1252)}
Dim
line As VectorPolyline = map.CreateLine(gps)



Dim
pstrs As String = "116.4053, 39.905, 121.4726, 31.2317, 113.2806, 23.1252"
Dim
line As
VectorPolyline = map.CreateLine(pstrs)


示例二

以下代码是等效的:



Dim cities As New Dictionary(Of String, GeoPoint)
cities.Add(
"北京", New GeoPoint(116.4053, 39.905))
cities.Add(
"上海", New GeoPoint(121.4726, 31.2317))
cities.Add(
"广州", New GeoPoint(113.2806, 23.1252))
cities.Add(
"成都", New GeoPoint(104.0657, 30.6595))
cities.Add(
"哈尔滨", New GeoPoint(126.6425, 45.757))
Dim
pointss As New List(Of GeoPoint()) '一个GeoPoint数组集合。
pointss.Add({cities(
"上海"), cities("北京")}) '定义第一条线段经过的点
pointss.Add({cities(
"成都"), cities("广州"), cities("上海"), cities("哈尔滨")}) '定义第二条线段经过的点
Dim
line As VectorPolyline = map.CreateLine(pointss)



Dim
ptss As String = "121.4726,31.2317,116.4053,39.905|104.0657,30.6595,113.2806,23.1252,121.4726,31.2317,126.6425,45.757"
Dim
line As
VectorPolyline = map.CreateLine(ptss)

CreatePolygon 方法,基于经纬度数据创建多边形。

语法:

CreatePolygon(points)
CreatePolygon(pointss)
CreatePolygon(pointsString)

points:IEnumerable(Of GeoPoint)类型,例如GeoPoint的集合或数组,用于指定多边形各顶点的位置
pointss:如果包括多个多边形,可以用此参数指定多个IEnumerable(Of GeoPoint)
pointsString:字符串型,用于指定多边形的顶点位置,奇数位置为经度,偶数位置为纬度,如果包括多个多边形,用vblf或符号"|"隔开

示例一

以下代码是等效的:

Dim cities As New Dictionary(Of String, GeoPoint)
cities.Add(
"北京", New GeoPoint(116.4053, 39.905))
cities.Add(
"上海", New GeoPoint(121.4726, 31.2317))
cities.Add(
"广州", New GeoPoint(113.2806, 23.1252))
cities.Add(
"成都", New GeoPoint(104.0657, 30.6595))
Dim
points() As GeoPoint = {cities("北京"), cities("上海"), cities("广州"), cities("成都")}
Dim
polygon As VectorPolygon = map.CreatePolygon({points})



Dim points As String = "116.4053,39.905,121.4726,31.2317,113.2806,23.1252,104.0657,30.6595"
Dim
polygon As
VectorPolygon = map.CreatePolygon(points)

示例二

以下代码是等效的:

Dim cities As New Dictionary(Of String, GeoPoint)
cities.Add(
"上海", New GeoPoint(121.4726, 31.2317))
cities.Add(
"南通", New GeoPoint(120.8646, 32.0162))
cities.Add(
"苏州", New GeoPoint(120.6196, 31.2994))
cities.Add(
"嘉兴", New GeoPoint(120.7509, 30.7627))
cities.Add(
"杭州", New GeoPoint(120.1536, 30.2875))
cities.Add(
"金华", New GeoPoint(119.6495, 29.0895))
cities.Add(
"宁波", New GeoPoint(121.5498, 29.8684))
Dim
ps1() As GeoPoint = {cities("上海"), cities("南通"), cities("苏州"), cities("嘉兴")} '指定第一个多边形各点的经纬度
Dim
ps2() As GeoPoint = { cities("杭州"), cities("金华"), cities("宁波")} '指定第二个多边形各点的经纬度
Dim
polygon As
VectorPolygon = map.CreatePolygon({ps1, ps2})

Dim ps1 As String = "121.4726,31.2317,120.8646,32.0162,120.6196,31.2994,120.7509,30.7627" '指定第一个多边形各点的经纬度
Dim
ps2 As String = "120.1536,30.2875,119.6495,29.0895,121.5498,29.8684" '指定第二个多边形各点的经纬度
Dim
polygon As VectorPolygon = map.CreatePolygon(ps1 & "|" & ps2) '
创建多边形

CreateBezierCurve 方法,用于绘制贝塞尔曲线,语法:
 

CreateBezierCurve(points)
CreateBezierCurve(pointsString)

points:IEnumerable(Of GeoPoint)类型,例如GeoPoint的集合或数组,用于指定曲线经过的点。
pointsString:字符串型,用于指定曲线经过的点位置,奇数位置为经度,偶数位置为纬度,如果包括多个线段,用vblf或符号"|"隔开 。


参考:绘制非标形状
 

CreateBezierCurveArrow 方法,用于绘制带箭头的贝塞尔曲线,语法:

 

CreateBezierCurveArrow(points,both)
CreateBezierCurveArrow(pointsString,both)

points:IEnumerable(Of GeoPoint)类型,例如GeoPoint的集合或数组,用于指定曲线经过的点。
pointsString:字符串型,用于指定曲线经过的点位置,奇数位置为经度,偶数位置为纬度,如果包括多个线段,用vblf或符号"|"隔开 。
both:可选参数,逻辑型,设置为True,则曲线起点和重点都会有箭头,默认为False,只在重点绘制箭头


参考:绘制非标形状

CreateCircle 方法,基于经纬度数据绘制圆形。

语法:

CreateCircle(p1, p2)
CreateCircle(p1, p2, Pixel)
CreateCircle(pointsString)
CreateCircle(pointsString, Pixel)

p1: 圆心位置
p2: 圆周上任意一点的位置
pointsString: p1和p2的字符串形式,奇数位置为经度,偶数位置为纬度。
Pixel: 地球是一个球面,所以CreateCircle绘制的圆形默认会出现变形,如果要绘制严格的圆形,请将此参数设置为True

示例

Dim p1 As New GeoPoint(121.4726, 31.2317)
Dim
p2 As New GeoPoint(120.8646, 32.0162)
Dim
polygon As
VectorPolygon = map.CreateCircle(p1, p2)

等效于:

Dim polygon As VectorPolygon = map.CreateCircle("121.4726,31.2317,120.8646,32.0162")

参考:
绘制非标形状

CreateRectangle 方法,基于经纬度数据创建平行四边形。

平行四边形也是多边形,所以返回的类型依然是
VectorPolygon。

语法:

CreateCircle(p1, p2)
CreateCircle(pointsString)

p1:四边形的一个顶点
p2:四边形的另一个顶点(和p1成对角关系)
pointsString: p1和p2的字符串形式,奇数位置为经度,偶数位置为纬度。

Dim p1 As New GeoPoint(121.4726, 31.2317)
Dim
p2 As New GeoPoint(120.8646, 32.0162)
Dim
polygon As VectorPolygon = map.CreateRectangle
(p1, p2)

等效于:

Dim polygon As VectorPolygon = map.CreateRectangle("121.4726,31.2317,120.8646,32.0162")

参考:
绘制非标形状

CreateEllipse 方法,用于绘制椭圆。

语法:

CreateEllipse(p1, p2)
CreateEllipse(pointsString)

p1:椭圆所在四边形的一个顶点
p2:椭圆所在四边形的另一个顶点(和p1成对角关系)
pointsString: p1和p2的字符串形式,奇数位置为经度,偶数位置为纬度。

参考:绘制非标形状
CreateDiamond 方法,用于绘制菱形


语法:

CreateEllipse(p1, p2)
CreateEllipse(pointsString)

p1:菱形的一个顶点
p2:和p1在同一条边上的另一个顶点
p2:pointsString: p1和p2的字符串形式,奇数位置为经度,偶数位置为纬度。

参考:绘制非标形状

CreatePie 方法,基于经纬度数据绘制扇形。

语法:

CreateArc(p1, p2, sweepAngle)

p1: 圆心位置
p2: 弧线起点
sweepAngle: 扇形的扫描角度数

例如:

Dim cities As New Dictionary(Of String, GeoPoint)
cities.Add(
"广州", New GeoPoint(113.2806, 23.1252))
cities.Add(
"成都", New GeoPoint(104.0657, 30.6595))
'
以广州为圆心,以成都为扇形起点,扇形扫描角度为30
Dim
pie As VectorPolygon = map.CreatePie(cities("广州"), cities("成都"), 30)

参考:绘制非标形状
CreateArc 方法,基于经纬度数据绘制弧线。

语法:

CreateArc(p1, p2, sweepAngle)

p1: 圆心位置
p2: 弧线起点
sweepAngle: 弧线的扫描角度数

例如:

cities.Add("广州", New GeoPoint(113.2806, 23.1252))
cities.Add(
"成都", New GeoPoint(104.0657, 30.6595))
'
以广州为圆心,以成都为起点,弧线扫描角度为60
Dim
line As VectorPolyline = map.CreateArc(cities("广州"), cities("成都"), 60)

参考:绘制非标形状
CreateLinkArc 方法,基于经纬度数据绘制连接两点的弧线。

语法:

CreateLinkArc(p1, p2, curvature)

p1: 弧线起点
p2: 弧线终点
curvature: 弧线弯曲度,
绝对值越大弯曲越明显,正数向上弯,负数向下弯

例如:

Dim cities As New Dictionary(Of String, GeoPoint)
cities.Add(
"广州", New GeoPoint(113.2806, 23.1252))
cities.Add(
"北京", New GeoPoint(116.4053, 39.905))
For
curv As Double = -2 To 2 Step 0.1
   
Dim line As VectorPolyline = map.CreateLinkArc(cities("广州"), cities("北京"), curv)
    line.Style.Stroke.Color = Color.BurlyWood
    layer.Items.Add(line)

Next

参考:绘制非标形状

CreateCurve 方法,基于经纬度数据绘制连接两点的水滴状曲线 。

语法:

CreateCurve(p1, p2, curvature, vault)

p1: 曲线起点
p2: 曲线终点
curvature::曲线弯曲度,
绝对值越大弯曲越明显,正数向上弯,负数向下弯
vault:曲线拱点位置,取值范围0到1,0靠近起p1,1靠近终点,0.5则居中。

例如:

Dim cities As New Dictionary(Of String, GeoPoint)
cities.Add(
"广州", New GeoPoint(113.2806, 23.1252))
cities.Add(
"北京", New GeoPoint(116.4053, 39.905))
For
curv As Double = -2 To 2 Step 0.1
   
'起点为广州,终点为北京,拱点靠近北京
   
Dim line As VectorPolyline = map.CreateCurve(cities("广州"), cities("北京"), curv, 1)
    line.Style.Stroke.Color = Color.BurlyWood
    layer.Items.Add(line)

Next


参考:绘制非标形状

CreateCurveWithArrow 方法,基于经纬度数据绘制连接两点的水滴状曲线 ,曲线终点会显示一个箭头。

语法:

CreateCurveWithArrow(p1, p2, curvature, vault)

p1: 曲线起点
p2: 曲线终点
curvature::曲线弯曲度,
绝对值越大弯曲越明显,正数向上弯,负数向下弯
vault:曲线拱点位置,取值范围0到1,0靠近起p1,1靠近终点,0.5则居中
arrowLength: 可选参数,箭头长度,默认为8
arrowAngle:可选参数,箭头夹角数,默认为30

例如

Dim cities As New Dictionary(Of String, GeoPoint)
cities.Add(
"北京", New GeoPoint(116.4053, 39.905))
cities.Add(
"上海", New GeoPoint(121.4726, 31.2317))
cities.Add(
"广州", New GeoPoint(113.2806, 23.1252))
cities.Add(
"成都", New GeoPoint(104.0657, 30.6595))
cities.Add(
"哈尔滨", New GeoPoint(126.6425, 45.757))
For
Each city As String In cities.Keys
   
If city <> "北京" Then
       
Dim curv As Double = -0.3
       
If cities(city).X < cities("北京").X Then '翻转弧线方向
            curv = -curv
       
End If
       
'箭头长度为8,夹角为30度:
       
Dim line As VectorPolyline = map.CreateCurveWithArrow(cities("北京"), cities(city), curv, 0.2, 8, 30)
        line.Style.Stroke.Color = Color.Red
        line.Style.Stroke.Width = 2
        layer.Items.Add(line)
   
End If
Next

参考:绘制非标形状

CreateLineWithArrow 方法,基于经纬度数据绘制带箭头的线条。

语法:

CreateLineWithArrow(p1,p2,arrowLength,arrowAngle)
CreateLineWithArrow(points,arrowLength,arrowAngle)
CreateLineWithArrow(pointsString,arrowLength,arrowAngle)
CreateLineWithArrow(p1,p2,both,arrowLength,arrowAngle)
CreateLineWithArrow(points,both,arrowLength,arrowAngle)
CreateLineWithArrow(pointsString,both,arrowLength,arrowAngle)

p1:线条起点
p2:线条终点
points: 集合,包括线条的所有转折点
both:可选参数,设置为True,线条首尾都会出现箭头,默认为False,只在线条末端绘制箭头
pointsString:字符串,线条所有转折点的经纬度数据,数据用逗号隔开,奇数位置为经度,偶数位置为纬度
arrowLength:可选参数,箭头长度,默认为8
arrowAngle:可选参数,箭头夹角,默认为30

以下三行代码是等效的:

Dim line As VectorPolyline = map.CreateLineWithArrow(New GeoPoint(116.4053, 39.905), New GeoPoint(113.2806, 23.1252), 6, 30)
Dim line As VectorPolyline = map.CreateLineWithArrow({New GeoPoint(116.4053, 39.905), New GeoPoint(113.2806, 23.1252)}, 6, 30)
Dim
line As VectorPolyline = map.CreateLineWithArrow("116.4053, 39.905,113.2806, 23.1252", 6, 30)


参考:绘制非标形状

GetGeoPointByDistanceAngle 方法,用于根据距离计算经纬度坐标。

语法:

GetGeoPointByDistanceAngle(startPoint, distanceKm, angleY)

startPoint:起点
distanceKm:距离,单位为公里
angleY:起点和终点的联系与纬线的夹角,正东为0度,正南90度,正西为180度。正北270(-90)度。

返回一个GeoPoint,表示终点的经纬度坐标。

参考:根据距离计算经纬度
IsPointInPolygon 判断一个GeoPoint是否包括在一个多边形里头。

语法:

IsPointInPolygon(point, polygon)

point: GeoPoint类型
polygon:一个多边形,判断point是否包括在polygon中
AddVirtualLayer 方法,用于增加虚拟矢量层。

语法:

AddVirtualLayer(minZoom,MaxZoom)

minZoom和MaxZoom(可选)参数用于指定这个图层的缩放比例范围,只有缩放比例位于这个范围内时,图层才可见。

参考:使用虚拟矢量层

CenterTo 方法,用于地图中心的经纬度。

语法:

CenterTo(X, Y)

X:中心经度
Y:中心维度

例如将地图中心设置为深圳:

map.CenterTo(114.06, 22.55)
CreatFromJsonObject 方法,根据Json节点生成形状。

法为:

CreatFromJsonObject(Feature,MaxCount)

Feature: JObject类型,GeoJson文件中的一个Feature节点。
MaxCount:可选参数,对于MultiLineString和MultiPolygon类型的数据,可用此参数设置生成的线条和多边形的最大数量。

参考:使用GeoJson文件

CreateRecordsFromKML

GetKmlStyleColor
方法,CreateRecordsFromKML用于读取并解析KML文件,GetKmlStyleColor用于将KML文件中的字符串格式的颜色转换为可使用的颜色

参考:使用KML文件
CreateRecordsFromSHP 方法,CreateRecordsFromSHP用于读取并解析SHP文件,

参考:使用SHP文件
CreateMarkShape 方法,用于创建自绘制的标记形状。

参考:自行绘制标记  绘制复杂的形状
RolateGeoPoints 方法,用于对旋转形状。

语法:

RolateGeoPoints(points,angle)

points:用于生成形状的经纬度点,IEnumerable(Of GeoPoint)类型,例如GeoPoint的集合或数组。
angle:旋转度数,正数顺时钟旋转,负数逆时钟旋转。

所以其实不是旋转形状,而是旋转生成形状的数据

参考:设计一个地图编辑器

RolateGeoPointString 方法,用于旋转形状。

语法:

RolateGeoPointString(geoPointsString, angle)

geoPointsString,经纬度点的字符串形式,数据用逗号隔开,奇数位置为经度,偶数位置为纬度
angle:旋转度数,正数顺时钟旋转,负数逆时钟旋转。

所以其实不是旋转形状,而是旋转生成形状的数据

参考:设计一个地图编辑器
MoveGeoPointString 方法,用于移动形状

MoveGeoPointString(geoPointsString,dx,dy)

geoPointsString,经纬度点的字符串形式,数据用逗号隔开,奇数位置为经度,偶数位置为纬度
dx:水平移动距离,单位为像素
dy:垂直移动距离,单位为像素
IsGeoPointInPolygon 方法,用于判断某个点是否包括在一个指定的形状中,语法:

IsGeoPointInPolygon(gp,polygon)

gp: GeoPoint类型
polygon:VectorPolygon类型

如果点gp包括在形状polygon中,则返回True,否则返回False

ToGeoPoint
ToGeoPointsString
用于将以像素为单位的点坐标转换为以经纬度为单位的坐标,语法:

ToGeoPoint(point)
ToGeoPointsString(pointsString)

point:Point类型,指定要被转换的单个点。
pointsString:字符串型,指定要被转换的多个点,数据用逗号分割,奇数位为水平坐标,偶数位为垂直坐标。
ToScreenPoint
ToScreenPointsString
用于将经纬度坐标转换为以像素为单位的坐标,语法:

ToScreenPoint(point)
ToScreenPointsString(pointsString)

point:Point类型,指定要被转换的单个点。
pointsString:字符串型,指定要被转换的多个点,数据用逗号分割,奇数位为经度,偶数位为维度。
TileSource 属性,用于设置地图源,TileSoureEnum类型,可选值有:

None
Road
Aerial
Hybrid
Custom

参考:
使用Map控件
Zoom
MinZoom
MaxZoom
属性,分别用于指定地图的当前缩放级别,允许的最大缩放级别和最小缩放级别。
缩放级别每增加1,则地图分辨率就翻倍,如果缩放级别超过允许范围,地图将不可见。
Center 属性,GeoPoint类型,返回或设置地图中心的经纬度坐标

例如将地图中心设置为深圳:


map.Center =
New
GeoPoint(114.06, 22.55)
MouseGeoPosition 属性,GeoPoint类型,返回当前鼠标所在位置的经纬度坐标
AllowTranslating 属性,是否允许通过鼠标拖动或平移工具移动地图。
AllowZooming 属性,是否允许通过鼠标滚轮或缩放工具缩放地图。
ZoomToolVisible 属性,是否显示缩放工具
PanToolVisible 属性,是否显示平移工具
DistanceScaleVisible 属性,是否显示比例尺
ZoomChanged 事件,地图的缩放级别发生变化后执行
CenterChanged 事件,地图中心位置发生变化后执行
GetMapTile 事件,获取地图瓦片时执行,参考:使用高德地图
OwerDrawMark 事件,绘制自定义标记形状时执行,参考:自行绘制标记  绘制复杂标记
GetDrawingBounds 事件,获取自定义形状的绘制区域时执行,参考:绘制复杂标记
GetVirtualItems 事件,绘制虚拟矢量层的时候执行,参考:使用虚拟矢量层


本页地址:http://www.foxtable.com/webhelp/topics/6169.htm