爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: vortexroc

在面图层上面自己标注点后,是否可以提取经纬度等信息?

[复制链接]
发表于 2012-9-27 16:50:31 | 显示全部楼层

自己实现吧,就是简单的两点间距离计算,然后找出距离最近的点,可以设定一个搜索范围来提高效率。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2012-9-27 17:04:41 | 显示全部楼层
MeteoInfo 发表于 2012-9-27 16:50
自己实现吧,就是简单的两点间距离计算,然后找出距离最近的点,可以设定一个搜索范围来提高效率。

改写了一下,循环所有的乡镇格点,限定距离5km,如下:
aLayer = mipy.MapDocument.ActiveMapFrame.MapView.GetLayerFromName("alltown.shp")

for gPoint in mipy.MapDocument.ActiveMapFrame.MapView.GraphicCollection.GraphicList:
        aP = gPoint.Shape.Point
        townName="无"
        i=0
        for point in aLayer.ShapeList                        (这行提示出现错误)
                px=aLayer.GetCellValue("LONGTITUE", i)
                py=aLayer.GetCellValue("LATITUE", i)
                if GeoComputation.GetDistance(aP.X,aP.Y,px,py)<5
                        townName=aLayer.GetCellValue("RNAME", i)
                        break
                i+=1
        print aP.X, aP.Y,townName

提示出错
SyntaxError:unexpected token '<newline>' ,请问是何原因?
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2012-9-27 17:47:09 | 显示全部楼层
解决了,语法的错误。。。
但是这个方法在站点和标注点多的时候效率有些低啊
密码修改失败请联系微信:mofangbao
发表于 2012-9-27 21:24:06 | 显示全部楼层
vortexroc 发表于 2012-9-27 17:47
解决了,语法的错误。。。
但是这个方法在站点和标注点多的时候效率有些低啊

可以给一个范围,先通过比较点是否在此范围之外来排除一些点。
minx = ap.x - 5
maxx = ap.x + 5
miny = ap.y - 5
maxy = ap.y +5
if px < minx or px > maxx or py < miny or py > maxy:
    continue
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2012-9-28 12:06:30 | 显示全部楼层
MeteoInfo 发表于 2012-9-27 21:24
可以给一个范围,先通过比较点是否在此范围之外来排除一些点。
minx = ap.x - 5
maxx = ap.x + 5

还有一个问题,如果同时标注点和线,aP = gPoint.Shape.Point这一句就失败了,怀疑是读到线图元然后出错,怎么进行判断?
我尝试 用gPoint.Shape.ShapeTypes,但脚本提示没有这个属性。。。

密码修改失败请联系微信:mofangbao
发表于 2012-9-28 12:32:17 | 显示全部楼层
vortexroc 发表于 2012-9-28 12:06
还有一个问题,如果同时标注点和线,aP = gPoint.Shape.Point这一句就失败了,怀疑是读到线图元然后出错, ...

看得出你还是很用心。ShapeTypes是枚举的名称,Shape的属性是ShapeType,可以这样判断:
if gPoint.Shape.ShapeType == ShapeTypes.Point:
    ....
密码修改失败请联系微信:mofangbao
发表于 2012-9-28 12:35:17 | 显示全部楼层
对了,要在前面引入MeteoInfoC.Shape命名空间中的类:
from MeteoInfoC.Shape import *
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2012-9-28 22:34:12 | 显示全部楼层
MeteoInfo 发表于 2012-9-28 12:35
对了,要在前面引入MeteoInfoC.Shape命名空间中的类:
from MeteoInfoC.Shape import *

呵呵,解决了,谢谢老师
这回对脚本的用法也有了一定了解了
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2012-10-19 11:29:01 | 显示全部楼层
MeteoInfo 发表于 2012-9-28 12:35
对了,要在前面引入MeteoInfoC.Shape命名空间中的类:
from MeteoInfoC.Shape import *

回到这个帖子继续问后续问题,如果判断点在线上,可以用PointInPolygon么,线图层属于Polygon类型么。。
我尝试了似乎不行
不知道这个问题有啥解决方案,请老师指教
密码修改失败请联系微信:mofangbao
发表于 2012-10-19 12:54:20 | 显示全部楼层
vortexroc 发表于 2012-10-19 11:29
回到这个帖子继续问后续问题,如果判断点在线上,可以用PointInPolygon么,线图层属于Polygon类型么。。
...

Polygon是多边形,当然不是线了,线是Polyline。点在线上的算法还没顾上整理,目前没有现成的。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表