J'essaie d'utiliser ArcGIS 10.2 pour créer un tampon de points basé sur une zone prédéfinie (par exemple 400 km2). De plus, les tampons de certains points sont proches du littoral, ce qui nécessite que les tampons soient coupés sur le littoral et aient toujours la même superficie que ceux qui sont à l'intérieur des terres (400 km2).
Est-ce que quelqu'un sait comment cela pourrait être fait avec Model Builder ou Arcpy?
J'ai des compétences limitées avec Arcpy et R, mais je serais heureux de travailler sur certains scripts pour obtenir une solution.
Veuillez voir l'image ci-dessous montrant une représentation graphique de ce que j'essaie de réaliser
arcpy
arcgis-10.2
r
buffer
Funkeh-Monkeh
la source
la source
Réponses:
L'aire d'un tampon circulaire est une fonction monotone augmentant le rayon du tampon (sur un système de coordonnées planaires de toute façon). Ainsi, une stratégie de recherche simple peut trouver un rayon
R
tel que la zone du tampon de rayonR
découpée dans la région polygonaleA
est (jusqu'à une certaine tolérance)s
.L'algorithme de recherche le plus simple serait simplement une recherche binaire. Commencez avec deux rayons, un très petit et un très grand, de sorte que la zone souhaitée se situe quelque part entre la zone des tampons écrêtés de ces rayons. Ensuite, prenez simplement le milieu de celles-ci et calculez les zones tampons, et déterminez si le rayon souhaité est au-dessus ou en dessous du point médian. Mettez à jour vos limites de rayon et répétez jusqu'à ce que vous atteigniez une certaine tolérance de la zone souhaitée.
Écrire une recherche binaire en Python et utiliser l'API ArcGIS Python semble être un bon moyen d'apprendre! Je suis presque sûr d'avoir fait ça dans R, il y a des années ...
Voici un code R:
Usage:
Configurez d'abord une simple région polygonale britannique:
Définissez maintenant un point:
Ensuite, vous venez de:
Ceci est une liste avec deux composants,
b
est le tampon:et il a la bonne zone:
et
r
est la sortie deuniroot
, qui inclut la valeur du rayon du tampon.Dans ce cas, la largeur du tampon était donc un peu moins de 64 km.
Les seules choses à manipuler ici sont les valeurs initiales inférieures et supérieures - je suppose que vous pouvez intuitivement un rayon inférieur
sqrt(A/pi)
et la supérieure n'est pas si importante que l'algorithme de recherche l'augmentera jusqu'à ce qu'il capture l'intervalle.L'algorithme de recherche peut échouer si le rayon max initial est vraiment trop grand, car vous pouvez tamponner toute votre région avec un rayon énorme, auquel cas le changement de rayon ne changera pas la zone ... Mais des limites raisonnables devraient empêcher cela de se produire.
la source
rgeos
paquet et sagBuffer
fonction, très probablement ...R
code sont (a) il sépare les calculs SIG de la logique de recherche et (b) il capitalise sur des algorithmes de recherche (enuniroot
) qui ont été optimisés et testés - vous n'avez pas besoin d'en écrire un vous-même (et ce ne sera probablement pas le plus efficace).C'est presque impossible, à cause de la position des points. Vous pouvez créer des zones tampons de 400 km 2 , mais les points plus proches du littoral auront toujours une zone plus petite que ceux plus éloignés (> 400 km 2 ).
La seule chose que vous pouvez faire est d'effectuer une analyse de tampon sur les points et de découper ensuite les tampons créés avec la fonction littoral.
la source