2017-01-03 16 views
1

У меня есть .shp-файл, который я прочитал в dataframe геоданных. Я меняю систему координат на 2163, так как я делаю некоторые прямоугольные карты и хочу, чтобы они выглядели несколько нормально.Функция масштабирования shapely в геоданных возвращает точки с одинаковой величиной

geo_df = geo.GeoDataFrame.from_file('path to shp files here') 
geo_df = geo_df.to_crs(epsg=2163) 

Dataframe выглядит следующим образом:

In [10]: geo_df.geometry 
Out[10]: 
0  POLYGON ((1189879.121395004 -1019103.847184072... 
1  POLYGON ((1220434.289428635 -1303875.122589418... 
2  POLYGON ((1210969.088787247 -1295221.772496042... 
3  POLYGON ((1217371.162725744 -1300978.843646188... 

Теперь я вычисление парной матрицы расстояний, но так как эти координаты в метрах, номер довольно большой и я бег в проблемы переполнения. Поэтому я стараюсь это:

geo_df.geometry = geo_df.geometry.scale(xfact=1/10000, yfact=1/10000, zfact=1.0) 

Но координаты моих полигонов не любой меньше (просто сдвинуты немного, и это хорошо). Распечатка предположительно измененной области данных дает следующее:

In [12]: geo_df.geometry.scale(xfact=1/10000, yfact=1/10000, zfact=1.0) 
Out[12]: 
0  POLYGON ((1197230.99656014 -1026296.564074459,... 
1  POLYGON ((1221475.564597901 -1304490.752661498... 
2  POLYGON ((1215982.083961291 -1290526.930856638... 
3  POLYGON ((1223839.012413891 -1292585.80012823,... 

Я надеялся получить что-то вроде этого.

Out[12]: 
0  POLYGON ((119.723099656014 -102.6296564074459,... 
1  POLYGON ((122.1475564597901 -130.4490752661498... 
2  POLYGON ((121.5982083961291 -129.0526930856638... 
3  POLYGON ((122.3839012413891 -129.258580012823,... 

Может быть, я просто не понимаю, что shapely's scaling function должен делать, хотя это кажется довольно простым.

ответ

2

Масштабирование определено относительно центральной точки. Масштабирование, которое вы наложили, действительно делало полигоны меньшими, но сохраняло центральную точку в центре ограничивающей рамки многоугольника. Аргумент ключевого слова origin в shapely.affinity.scale по умолчанию для центра многоугольника; для уменьшения значений координат в 10000, вы можете установить origin=(0, 0) следующим образом:

geo_df.geometry = geo_df.geometry.scale(xfact=1/10000, yfact=1/10000, zfact=1.0, origin=(0, 0))