Advertisement
Guest User

Code TD3 géocodage

a guest
Dec 1st, 2015
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.14 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2.  
  3. __author__ = 'donald'
  4.  
  5. import sys, os
  6. sys.path.append(r'C:\Program Files (x86)\QGIS Lyon\apps\Python27\Lib\site-packages')
  7. os.environ['PATH'] = r'C:\Program Files (x86)\QGIS Lyon\bin'
  8. os.environ['GDAL_DATA']=r'C:\Program Files (x86)\QGIS Lyon\share\gdal'
  9.  
  10.  
  11. from osgeo import ogr,osr
  12.  
  13. # address_no=float(raw_input("Saisir le numero de l'adresse:"))
  14. # address_street=raw_input("Saisir la rue de l'adresse:")
  15. # address_street1=address_street.replace(" ","")
  16. # address_city=raw_input("Saisir la ville de l'adresse:")
  17. # address_city1=address_city.replace(" ","")
  18.  
  19. StreetFile = r'C:\Users\donald\Documents\Université Sherbrooke\Travail session Python\RRN_QC_8_0_SEGMROUT_MTL.shp'
  20. # transformation de système de projection
  21. source = osr.SpatialReference()
  22. source.ImportFromEPSG(4326)#lat long
  23. target = osr.SpatialReference()
  24. target.ImportFromEPSG(2154)# en mètres
  25. transform = osr.CoordinateTransformation(source, target)
  26.  
  27. dataSource1 = ogr.Open(StreetFile)
  28. daLayer1 = dataSource1.GetLayer()
  29.  
  30. # layerDefinition = daLayer1.GetLayerDefn()
  31. # for i in range(layerDefinition.GetFieldCount()):
  32. # print layerDefinition.GetFieldDefn(i).GetName()
  33. # print ""
  34.  
  35.  
  36. point1=ogr.Geometry(ogr.wkbPoint)
  37. latitude=45.513522
  38. longitude=-73.605681
  39. point1.AddPoint (longitude,latitude)#(-73.602473,45.507056)#(-73.561060,45.512703)#(-73.554,45.508)45.512703,
  40. point1.Transform(transform)
  41. print point1
  42. pt_txt=str(point1)
  43. pt_txt1=pt_txt.replace("POINT (","")
  44. pt_txt2=pt_txt1.replace(","," ")
  45. pt_txt3=pt_txt2.replace(")","")
  46. list_pt=pt_txt3.split()
  47. print list_pt
  48.  
  49. bufferDistance = 200
  50. buffer_geom = point1.Buffer(bufferDistance)
  51.  
  52.  
  53. # pour trouver les rues situées dans le buffer
  54. min_distance=bufferDistance
  55. street_ID=0
  56. for feature in daLayer1:
  57. pt_geom=feature.GetGeometryRef()
  58. pt_geom.Transform(transform)
  59. if pt_geom.Within(buffer_geom):
  60. print "ID:",feature.IDN
  61. print feature.NOMRUE_C_G
  62. print pt_geom.Length()
  63. print pt_geom
  64. print "Distance:",pt_geom.Distance(point1)
  65. print ""
  66. if pt_geom.Distance(point1)<min_distance:
  67. min_distance=pt_geom.Distance(point1)
  68. street_ID=feature.IDN
  69. print "Smallest distance:",min_distance,"ID:",street_ID
  70.  
  71. # rouvrir de nouveau le layer pour faire la boucle et trouver la rue la plus proche
  72. dataSource1 = ogr.Open(StreetFile)
  73. daLayer1 = dataSource1.GetLayer()
  74.  
  75. # pour trouver le segment le plus proche
  76. for item in daLayer1:
  77. if item.IDN==street_ID:
  78. print "Closest street:",item.NOMRUE_C_G
  79. geom=item.GetGeometryRef()
  80. geom.Transform(transform)
  81. line_txt=str(geom)
  82. line_txt1=line_txt.replace("LINESTRING (","")
  83. line_txt2=line_txt1.replace(","," ")
  84. line_txt3=line_txt2.replace(")","")
  85. list=line_txt3.split()
  86. tot_length=geom.Length()
  87. print list
  88. print "Length:",tot_length
  89.  
  90. #trouver le segment approprié par rapport au point demandé
  91. spread=float(feature.NUMD_G-feature.NUMP_G)
  92. #if spread!=0:
  93. # target_length=((address_no-feature.NUMP_G)/spread)*tot_length
  94. # print target_length
  95. j=0
  96. cum_long=0
  97. while j<(len(list)-2):
  98. #longueur du segment
  99. # long=((X2-X1)**2+(Y2-Y1)**2)**0.5
  100. long=((float(list[j+2])-float(list[j]))**2+(float(list[j+3])-float(list[j+1]))**2)**0.5
  101. print "Length of segment:",long
  102. #distance du point au segment
  103. # var=X2-X1
  104. var=float(list[j+2])-float(list[j])
  105. # print "X2-X1:",var
  106. # print "Y2-Y1/var:",(float(list[j+3])-float(list[j+1]))/var
  107. # print "X3:",float(list_pt[1])
  108. # print "X1:",float(list[j])
  109. #dist=(Y3-Y1-[((Y2-Y1)/var)*(X3-X1))*var/long
  110. dist=(float(list_pt[1])-float(list[j+1])-(((float(list[j+3])-float(list[j+1]))/var)*(float(list_pt[0])-float(list[j]))))*var/long
  111. if dist<0:
  112. dist=dist*(-1)
  113. print "Distance to segment:",dist
  114. print ""
  115. j+=2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement