Saturday, March 19, 2011

ArcPy lỗi NIM059845

Mấy hôm nay Mr.iGIS cần dùng ArcPy viết một số geoprocessing script cho ArcGIS 10 thì phát hiện ra là hiện tại ArcPy đang bị lỗi trong xử lý các đối tượng hình học.


Với lỗi NIM059845, ArcPy tạo các đối tượng hình học có độ chính xác thấp. Kết quả là các phép so sánh hình học (ví dụ within) hoàn toàn không chính xác. Mặc dù lỗi đã được khắc phục trong Service Pack 2 (SP2) nhưng SP2 này chưa được ban hành. Trong lúc này, chúng ta có thể khắc phục bằng cách kèm theo tham chiếu không gian (spatial reference) khi tạo đối tượng hình học.

Ví dụ Mr.iGIS muốn kiểm tra polygonA có nằm trong (within) polygonB không.

Không viết code thế này:


polygonA = arcpy.Polygon(point_arrayA)
polygonB = arcpy.Polygon(point_arrayB)
polygonA.within(polygonB) #kết quả này có thể trả về False mặc dù trên thực tế polygon A hoàn toàn nằm trong polygonB



Để khắc phục lỗi, ta phải viết thế này:


polygonA = arcpy.Polygon(point_arrayA, spatial_reference)
polygonB = arcpy.Polygon(point_arrayB, spatial_reference)
polygonA.within(polygonB)


Trong đó spatial_reference là tham chiếu không gian có thể được lấy từ một shapefile hoặc từ file .prj. Ví dụ:


spatial_reference = arcpy.Describe("d:/temp/shapefile.shp").spatialReference
polygonA = arcpy.Polygon(point_arrayA, spatial_reference)
polygonB = arcpy.Polygon(point_arrayB, spatial_reference)
polygonA.within(polygonB)


Tham khảo thêm tại đây.

Chúc các bạn thành công.

-------------
Mr.iGIS

2 comments:

thong tin bat dong san said...

Cảm ơn, bài viết hữu ích

H S Consultants said...

This is not the first of your posts I've read, and you never cease to amaze me. Thank you, and I look forward to reading more.


UK Education Consultants

 

Copyright © 2007 - 2011 Mr.iGIS
Ghi rõ nguồn "gis-home.net" khi phát hành lại các nội dung trên trang web này.
Powered by Blogger | Template designed by Elque 2007, customized by Mr.iGIS | DHTML Menu By Milonic JavaScript