рдХреНрдпрд╛ рдореИрдВ Google рд╕реЗ Mercator рдкрд╣реЗрд▓реА рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, Google рд╕реЗ рдПрдХ рд╢рд╛рдВрдд рдорд╛рдирдЪрд┐рддреНрд░рдг рдкрд╣реЗрд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдЖрдпрд╛ рдерд╛ред рд▓рдЧрднрдЧ 20 рдорд┐рдирдЯ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?



рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдмрд╣реБрднреБрдЬ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдкреГрд╖реНрда рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдкрдврд╝рдиреЗ рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХрдВрд╕реЛрд▓ рдЦреЛрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖ:
for (polyIdx=0;i<polys.length;polyIdx++){ var paths = polys[polyIdx].getPaths().getArray(); var arMultiPolygons=[]; for (j=0;j<paths.length;j++){ var arPolygons=[]; for (i=0;i<paths[j].length;i++) { arPolygons.push([paths[j].getArray()[i].lng(),paths[j].getArray()[i].lat()]); } arMultiPolygons.push(p) } } 

polys рдПрд░реЗ рдореЗрдВ - рд╕рднреА рдкреЙрд▓реАрдЧреЛрди рд╕рдВрдЧреНрд░рд╣рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рддрдм рдпрд╣ рд╕рд░рд▓ рд╣реИ - рдмрд╣реБрднреБрдЬ рдХреЗ рд╕рднреА рдХреЛрдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд╕рднреА рдорд▓реНрдЯреАрдкреНрд▓рдЧреЙрди рд╣реИ ред рдЗрд╕рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдЗрди рдмрд╣реБрднреБрдЬреЛрдВ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рд╕рдорд╛рдзрд╛рди: рд╕реЗрд▓реЗрдирд┐рдпрдо , рдЬреЛ рдЖрдкрдХреЛ js рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдзрд╛рд░ - рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрд╕реЗрд▓ + рдкреЛрд╕реНрдЯрдЧрд┐рд╕ред

 from selenium import webdriver from shapely.geometry import polygon,multipolygon from shapely.wkt import loads import psycopg2 con = psycopg2.connect(database="WB",user='postgres',password='pass', host='127.0.0.1', port='5432') cur = con.cursor() #  ur.execute("create table googlePolygons ( idx integer, googlegeom geometry );") browser = webdriver.Firefox() browser.get("http://gmaps-samples.googlecode.com/svn/trunk/poly/puzzledrag.html") polysCount = browser.execute_script('return polys.length;') for iPoly in xrange(polysCount): element = browser.execute_script('var paths = polys[%s].getPaths().getArray();var arMultiPolygons=[];' 'for (j=0;j<paths.length;j++){ var arPolygons=[];' 'for (i=0;i<paths[j].length;i++) ' '{arPolygons.push([paths[j].getArray()[i].lng(),paths[j].getArray()[i].lat()]);} arMultiPolygons.push(p)}' 'return arMultiPolygons;'% str(iPoly)) polygons = [] #    for i in element: polygons.append(polygon.Polygon(i)) #   cur.execute("insert into googlePolygons (googlegeom,idx) values (geomfromewkt('"+multipolygon.MultiPolygon(polygons).wkt+"')," + str(iPoly)+");") con.commit() 

рдпрд╣рд╛рдВ рд╣рдордиреЗ рдЕрджреНрднреБрдд рдЖрдХрд╛рд░ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдЖрдкрдХреЛ рд╕реАрдзреЗ рд╣реА рдЕрдЬрдЧрд░ рдореЗрдВ рднреВ-рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдлрд┐рд░ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдлрд┐рд░ рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдардВрдбрд╛ рд╣реЛрдиреЗ рдкрд░, рдЖрдзрд╛рд░ рд╕реЗ рдХреНрдпреЛрдВ рдЪрд┐рдкрдХреЗ рд░рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдирд┐рд╖реНрдХрд░реНрд╖ рдмреБрд░рд╛ рдерд╛ - рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореБрдЭреЗ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред рдкрд╣рд▓рд╛ рдЕрдВрддрд░ рдЬрд┐рд╕рдиреЗ рдореЗрд░реА рдЖрдВрдЦ рдХреЛ рдкрдХрдбрд╝рд╛, рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреЛрд╕реНрдЯ-рдЬреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реЗрдВрдЯреНрд░реЛрдЗрдб рд╣реИрдВ рдЬрд╣рд╛рдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╣реБрднреБрдЬ рд╣реИрдВред рдФрд░ рдЬрдм рд╕реЗ рдореИрдВ рджреЗрд╢реЛрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рд┐рд░реНрдл рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реБрдбреМрд▓ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рднреМрдЧреЛрд▓рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ (рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ)ред рдЗрд╕рд▓рд┐рдП, рд╕рднреА рд╕рдорд╛рди, рдореИрдВрдиреЗ рдкреЛрд╕реНрдЯрдЧрд┐рд╕ рдХреЛ рдмрдВрдзрди рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдВ рдЖрдк рднреВрдЧреЛрд▓ рдХреЛ рднреВрдЧреЛрд▓ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдареАрдХ рд╣реИ, рдлрд┐рд░ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рдЖрдкрдХреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рджреЗрд╢реЛрдВ рдХреЗ рдмрд╣реБрднреБрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдХреГрддрд┐ рдлрд╝рд╛рдЗрд▓ рдвреВрдВрдврдиреА рд╣реЛрдЧреА, рдЗрд╕реЗ рдкреЛрд╕реНрдЯрдЧрд┐рд╕ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЖрдХреГрддрд┐рдпрд╛рдБ рдореИрдВрдиреЗ рдпрд╣рд╛рдБ рд╕реЗ рд▓реА рд╣реИрдВ ред рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреИрд╕реЗ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕реЗ рдмрд╣реБрдд рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдпреВрдЯреАрдПрдл -8 рдирд╣реАрдВ рд╣реИред

рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛ рд╣реБрдЖ рд╣реИ: рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ

 cur.execute("select idx,st_area(geography(st_setsrid(googlegeom,4326)))/1000000, " "st_astext(st_centroid(st_setsrid(googlegeom,4326))) " "from googlePolygons order by idx;") unRealC = cur.fetchall() cur.execute("select name, st_area(geography(st_setsrid(geom,4326)))/1000000, " "st_astext(st_centroid(st_setsrid(geom,4326))) from tm_world_borders;") realC = cur.fetchall() for urc in unRealC: for rc in realC: if float(abs(rc[1]-urc[1])) /rc[1]<0.02: browser.execute_script('pl = new google.maps.Polyline(' '{path: [new google.maps.LatLng('+str(loads(rc[2]).y)+','+ str(loads(rc[2]).x)+'),' ' new google.maps.LatLng('+str(loads(urc[2]).y)+','+ str(loads(urc[2]).x)+')],' 'map: map});') 

рдореИрдВрдиреЗ float(abs(rc[1]-urc[1])) /rc[1]<0.02 - float(abs(rc[1]-urc[1])) /rc[1]<0.02 рддреНрд░реБрдЯрд┐] рд╕реЗрдЯ рдХрд┐рдпрд╛ред рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдЬреЛ рдореВрд▓ рдмрд╣реБрднреБрдЬ рдХреЗ рдкреНрд░рддрд┐рд╢рдд рдХреЛ рдЙрд╕рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд╛рди рдХреЗ рдХреЗрдВрджреНрд░ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред loads() - рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП WKT рдХрдиреНрд╡рд░реНрдЯред
рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ:

рдХреНрдпрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛: рдЧреНрд░реАрдирд▓реИрдВрдб, рджрдХреНрд╖рд┐рдг рдЕрдлреНрд░реАрдХрд╛, рдЖрдЗрд╕рд▓реИрдВрдб, рдерд╛рдИрд▓реИрдВрдбред рдЕрдкрдиреА рдбрд┐рд╕реНрдХ рдкрд░ рдкрд╛рдП рдЧрдП рдПрдХ рдФрд░ рдЖрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдЙрд╕реА 2% рдХреЗ рд╕рд╛рде рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рдЬреЛ рдХреЗрд╡рд▓ рджрдХреНрд╖рд┐рдг рдЕрдлреНрд░реАрдХрд╛ рдФрд░ рдерд╛рдИрд▓реИрдВрдб рдХреА рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рдереАред

рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╕реЗ, рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ Google рдХрд┐рд╕ рдбреЗрдЯрд╛ рджреНрд╡рд╛рд░рд╛ рд░рд╛рдЬреНрдпреЛрдВ рдХреА рд╕реАрдорд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рднреА рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрди рд╕реАрдорд╛рдУрдВ рдХреЛ рдХрд┐рддрдирд╛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛: рдмрд╣реБрднреБрдЬ рдХреЗ рдЖрдХрд╛рд░ рдХреА рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝реЗрдВред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА Postgis рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рддрд░реАрдХреЛрдВ рдХреЛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реИ: рдЬреНрдпрд╛рдорд┐рддрд┐ рдХрд╛ рдПрдХ рдордЬрдмреВрдд рд╕рд░рд▓реАрдХрд░рдг, рдФрд░ рдлрд┐рд░ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реАрдорд╛ рдореЗрдВ рдХреЛрдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ред

Source: https://habr.com/ru/post/In169493/


All Articles