title: How do I ensure that the polygon in spatstat::owin(poly=<polygon>) does not have "negative area"
body: <p>I am a new user of the R spatstat package and am having problems creating a polygonal observation window with owin(). Code follows:</p>
  
  <pre><code>library("maps")
  library ("sp")` 
  library("spatstat")
  mass.map &lt;- map("state", "massachusetts:main", fill=T) # This returns a data frame includding x and y components that form a polygon of massachusetts mainland`
  
  mass.win &lt;- owin(poly=data.frame(x=mass.map$x, y=mass.map$y)
  </code></pre>
  
  <blockquote>
    <p>Error in if (w.area &lt; 0) stop(paste("Area of polygon is negative -", "maybe traversed in >wrong direction?")) : 
     missing value where TRUE/FALSE needed</p>
  </blockquote>
  
  <p>I tried things like reversing the order of the polygon and got same error.</p>
  
  <pre><code> mass.win &lt;- owin(poly=data.frame(x=rev(mass.map$x), y=rev(mass.map$y)))
  </code></pre>
  
  <p>Polygon  contains duplicated vertices</p>
  
  <blockquote>
    <blockquote>
      <p>Polygon  is self-intersecting
      Error in owin(poly = data.frame(x = rev(mass.map$x), y = rev(mass.map$y))) : 
       Polygon data contain duplicated vertices and self-intersection</p>
    </blockquote>
  </blockquote>
  
  <p>Then I figured that maybe the polygon returned by map() is not meant to be fed to owin(). So I tried loading a massachusetts shape file (I am totally taking guesses at this point).:</p>
  
  <pre><code>x &lt;- readShapePoly("../Geog/OUTLINE25K_POLY") ## The shape file for MASS, loaded from MassGIS website
  mass.poly &lt;- x &lt;- readShapePoly("../Geog/OUTLINE25K_POLY", force_ring=T, delete_null_obj=T) ## I got following error whether or not I used force_ring
  </code></pre>
  
  <blockquote>
    <p>mass.owin &lt;- as(mass.poly, "owin")
    Checking 1006 polygons...1, Polygon 1 contains duplicated vertices
    [Checking polygon with 91844 edges...]
    2, 3, .. [etd 1:21:52] ....10 [etd 36:12] ..... [etd 23:10] ....20 [etd 16:59] ..... [etd 13:22] ....30 [etd 11:01] ..... [etd 9:21] ....40 [etd 8:06] ..... [etd 7:09] ....50
     [etd 6:23] ..... [etd 5:46] ....60 [etd 5:15] ...[Checking polygon with 2449 edges...]
    .. [etd 4:49] ....70 [etd 4:27] ..... [etd 4:07] ....80 [etd 3:50] ..... [etd 3:36] ....90 [etd 3:22] ..... [etd 3:11] ....100
     [
    etc.</p>
  </blockquote>
  
  <p>I got messages complaining about intersecting vertices, etc. and it failed to build the polygon.</p>
  
  <p>Some context on problem: I am trying to use functions in spatstat for spatial relative risk calculations, i.e, the spatial ratio of denstity of cases vs. controls. For that I need an observation window and point plot within that window. I could cheat and make the observation window a rectangle around massachusetts but that would presumably distort values near the coast. In any case, I'd like to learn how to do this right for any future work I do with this package. Thanks for any help you can provide. </p>